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

问题描述 投票:0回答:1

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

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

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

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

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

php static php-7 autoload
1个回答
2
投票

use \MyNamespace\Error;不会触发自动加载,它只允许你在代码中使用较短的类名 - new Error()而不是new \MyNamespace\Error()。如果要包含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();
© www.soinside.com 2019 - 2024. All rights reserved.