我有太多的make-functions近三十个在一个名为functions.php的文件中,它们就像这样排序
< PHPfunction f1(…){……}function f2(…){……}function f3(…){……}功能……
这是一个太大的话题,无法覆盖但是。
这是一个简单的例子,说你有这些功能:
function f1(...){......} function f2(...){......} function f3(...){......} function f4(...){......} function f5(...){......}
你总是需要前三个,而不是第二个。
//Foo.php class Foo{ function f1(...){......} function f2(...){......} function f3(...){......} } //FooBar.php require_once 'Foo.php' class FooBar extends Foo{ function f4(...){......} } //FooBiz.php require_once 'Foo.php' class FooBiz extends Foo{ function f5(...){......} }
所以现在如果我使用Foo
require_once 'Foo.php'; $Foo = new Foo; $Foo->f1();
所以现在如果我使用FooBar
require_once 'FooBar.php'; //which has its own require_once 'Foo.php'; $FooBar = new FooBar; $FooBar->f1(); //from extends foo $FooBar->f4();
等等。 FooBiz 会是一样的 FooBar 除了它没有 f4() 相反,它拥有全部 Foo 和 f5() 。 FooBar 全部 Foo 和 f4() 。您可以根据需要对其进行分层,甚至可以覆盖“父”类中的方法等...
FooBiz
FooBar
f4()
Foo
f5()
这还有很多,但这是基础知识。另外,因为这些是类中的“方法”,所以您可以使用相同的方法名称创建完全不同的类,而不会出现命名冲突。
然后使用自动加载你甚至不需要 require_once 声明。
require_once
这是我制作的自动加载器,事实标准是使用Composer和它的自动加载器,但你可以玩这个,并了解它们的工作原理。
https://github.com/ArtisticPhoenix/Autoloader
有一些命名约定和要考虑的东西,但如果你不使用命名空间,只要 Autoloader.php 与类文件位于同一文件夹中,它应该只能使用以下方法加载它们:
Autoloader.php
require_once 'Autoloader.php'; $Autoloader = \evo\autoloader\Autoloader::getInstance(); // require_once 'Foo.php'; - no longer needed, nor is the ones in the class files $foo = new Foo;
这背后的想法是在使用new调用时按需加载类文件(这是函数和其他东西的集合)。