7

我应该包含/require_once 我在 PHP 中扩展的父类吗?

例如,我有一个名为 Shapes 的类

class Shapes {

}

然后我创建了一个名为的子类

require_once('shapes.php');

class Circle extends Shapes {

}

扩展时是否需要父类?还是应该只使用将子类扩展到其父类,即使它们在同一个文件夹中?

4

3 回答 3

14

你需要做一些事情让 PHP 在处理子类之前看到你的基类定义,否则会发生致命错误。

这可以是require_once基类文件的手册,也可以是自动加载(自动加载还有其他选项,但spl_autoload_register您应该使用该选项)。

使用哪种方法取决于范围:在编写小型测试项目时,设置自动加载可能是多余的。但是随着代码库变得越来越大,自动加载变得更有吸引力,因为:

  • 它可以隐藏复杂的源文件解析逻辑(例如,如果您有基类的可配置目录;还有更高级的场景)
  • 它可以增量配置:您可以使用多个作为链运行的自动加载器,并且应用程序的每个独立模块都可以注册其独立的自动加载器,与所有其他模块和平共存
于 2012-06-27T09:09:37.413 回答
2

是的,如果该类未在同一文件中声明,则必须包含它。

还有一个名为Autoloading Classes的功能,您可以使用它创建一个像这样的函数:

function __autoload($class){
    require_once('classes/' . $class . '.php');
}

它将自动包含在现有范围内找不到的类

您也可以阅读有关此功能的信息:autoload_register

于 2012-06-27T09:10:08.247 回答
2

您还可以使用 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.

于 2016-02-11T14:18:09.123 回答