只需将文件放入PSR-4目录即可加载PHP类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只需将文件放入PSR-4目录即可加载PHP类相关的知识,希望对你有一定的参考价值。

在我当前的lib中,我在类定义之外有静态代码的类,我想在浏览具有自动加载功能的index.php文件时执行(正确地将类文件放入PSR-4文件夹结构中,然后调用composer install) 。

这不是一件坏事。例如,在我的自定义Error.php类中,我可以在类外调用set_error_handler函数,因此警告可以被捕获。将此文件放入PSR-4自动加载可以减轻因为不必在Error.php中调用任何index.php代码来实现此捕获的痛苦。只使用我的命名空间并自动加载我的lib的每个源都会认为这是理所当然的。

我试图在use MyNamespaceError;文件中包含index.php,但是在Error类定义之外的Error.php中的代码不会自动执行。

只在我调用index.php文件(具有自动加载的文件)中的类方法时,才会执行类外的代码。

可以这样做吗?谢谢你的时间。

答案

use MyNamespaceError;不会触发自动加载,它只允许你在代码中使用较短的类名 - new Error()而不是new MyNamespaceError()。如果要包含Error.php文件,则需要使用此类。使用class_exist()可能是最安全的方法:

class_exists(Error::class);

但老实说,你应该重新考虑你的设计,在类声明的文件中隐式注册错误处理程序是针对PSR-1的,并且在大项目中可能真的很烦人。

文件应该声明符号(类,函数,常量等)或引起副作用(例如生成输出,更改.ini设置等),但不应该同时执行

https://www.php-fig.org/psr/psr-1/#23-side-effects

如果您创建单独的方法来注册错误处理程序并在index.php中显式调用它,那将不那么神奇:

Error::registerErrorHandler();

以上是关于只需将文件放入PSR-4目录即可加载PHP类的主要内容,如果未能解决你的问题,请参考以下文章

PSR-4 没有加载我的项目类

PSR-4 自动加载器致命错误:找不到类

如何为我的项目创建 PSR-4 自动加载器?

php PSR-4类自动加载器#php #class #autoloader

PSR-4 的实现示例

使用PSR-4配合composer autoload 自动加载文件夹