在我当前的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
文件(具有自动加载的文件)中的类方法时,才会执行类外的代码。
可以这样做吗?谢谢你的时间。
use \MyNamespace\Error;
不会触发自动加载,它只允许你在代码中使用较短的类名 - new Error()
而不是new \MyNamespace\Error()
。如果要包含Error.php
文件,则需要使用此类。使用class_exist()
可能是最安全的方法:
class_exists(Error::class);
但老实说,你应该重新考虑你的设计,在类声明的文件中隐式注册错误处理程序是针对PSR-1的,并且在大项目中可能真的很烦人。
文件应该声明符号(类,函数,常量等)或引起副作用(例如生成输出,更改.ini设置等),但不应该同时执行
如果您创建单独的方法来注册错误处理程序并在index.php
中显式调用它,那将不那么神奇:
Error::registerErrorHandler();