只需将文件放入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设置等),但不应该同时执行
如果您创建单独的方法来注册错误处理程序并在index.php
中显式调用它,那将不那么神奇:
Error::registerErrorHandler();
以上是关于只需将文件放入PSR-4目录即可加载PHP类的主要内容,如果未能解决你的问题,请参考以下文章