我应该包含/require_once 我在 PHP 中扩展的父类吗?
例如,我有一个名为 Shapes 的类
class Shapes {
}
然后我创建了一个名为的子类
require_once('shapes.php');
class Circle extends Shapes {
}
扩展时是否需要父类?还是应该只使用将子类扩展到其父类,即使它们在同一个文件夹中?
我应该包含/require_once 我在 PHP 中扩展的父类吗?
例如,我有一个名为 Shapes 的类
class Shapes {
}
然后我创建了一个名为的子类
require_once('shapes.php');
class Circle extends Shapes {
}
扩展时是否需要父类?还是应该只使用将子类扩展到其父类,即使它们在同一个文件夹中?
你需要做一些事情让 PHP 在处理子类之前看到你的基类定义,否则会发生致命错误。
这可以是require_once
基类文件的手册,也可以是自动加载(自动加载还有其他选项,但spl_autoload_register
您应该使用该选项)。
使用哪种方法取决于范围:在编写小型测试项目时,设置自动加载可能是多余的。但是随着代码库变得越来越大,自动加载变得更有吸引力,因为:
是的,如果该类未在同一文件中声明,则必须包含它。
还有一个名为Autoloading Classes的功能,您可以使用它创建一个像这样的函数:
function __autoload($class){
require_once('classes/' . $class . '.php');
}
它将自动包含在现有范围内找不到的类
您也可以阅读有关此功能的信息:autoload_register
您还可以使用 composer 来简化该过程。
composer.json
像这样制作
{
...
"autoload": {
"psr-4": {
"": "src/"
}
},
...
}
从https://getcomposer.org/获取 composer并运行composer install
。你应该像这样加载作曲家的自动加载脚本
require_once __DIR__ . '/vendor/autoload.php';
如果您的 PHP 低于 5.3.0,则替换__DIR__
为dirname(__FILE__)
.
并将您的文件放入文件src
夹。例如,如果您有课程Acme\Utils\FooBar
,那么它应该在src/Acme/Utils/FooBar.php
.