6

我对在 PHP 中加载依赖类的正确方法/最佳实践有疑问。

include_once我通常以类似于 Java 导入的方式将所有依赖项放在每个类的开头。就像是:

include_once 'dto/SomeObjectDTO.php;'
include_once 'dao/SomeObjectDAO.php;'
include_once 'util/SomeObjectUtil.php;'

class SomeObjectService{
    #class code here
}

这是加载类的最佳方式吗?或者也许将所有类加载到Bootstrap.php? 其他方法?

请注意,我说的是加载我自己的类,而不是像框架这样的复杂外部类。

4

4 回答 4

2

PHP的你可以注册你的自动加载方法。Symfony 2 包含一个很好的类来做这件事。

http://php.net/manual/en/function.spl-autoload-register.php

我已经对其进行了调整以与我们编写的库一起使用。

https://github.com/homer6/altumo/blob/master/source/php/loader.php

https://github.com/homer6/altumo/blob/master/source/php/Utils/UniversalClassLoader.php

这种改编允许您拥有不需要顶级名称空间具有相同文件夹名称的名称空间。

于 2012-11-29T12:22:07.357 回答
2

自 5.3 版起 PHP 支持命名空间。这允许您拥有一个包和类层次结构,就像您从 C++ 或 Java 中了解它们一样。

查看这些资源以了解更多信息:

http://www.php.net/manual/en/language.namespaces.basics.php

http://php.net/manual/en/language.namespaces.importing.php

于 2012-11-29T12:26:14.823 回答
2

就像 Homer6 所说,自动加载是 php 内置的依赖加载机制。

PHP-FIG提出了一系列称为 PSR 的 PHP 编码标准。PSR-0 处理类命名和自动加载。以下是一些链接:

另外,请记住,自动加载是有代价的。在建议的默认自动加载器中有很多字符串工作和 fs 工作(您可以实现自己的更快的自动加载器,但它不符合标准)。当您需要加载大量类时,这会使自动加载变慢。因此,如果您只需要加载 2 个类,您的方法会更快、更容易理解。

于 2012-11-29T12:28:39.190 回答
1
set_include_path(get_include_path()
        . PATH_SEPARATOR . 'path1'
        . PATH_SEPARATOR . 'path2'
);

// auto load classes:
function autoloadClasses($className) {
require_once $className . '.php';
}

spl_autoload_register('autoloadClasses');
于 2012-11-29T12:23:49.200 回答