vladimmi / construct-static
此包的最新版本(dev-master)没有可用的许可证信息。
用于实现静态类构造函数的小型Composer包装器
dev-master
2023-01-09 11:32 UTC
This package is not auto-updated.
Last update: 2024-09-28 18:05:20 UTC
README
这是一个小型包装器,用于Composer类加载器,旨在添加类似于Java中静态初始化器的功能。您可以定义名为__constructStatic()
的静态方法,当类首次加载到项目中时,它将被调用。
示例
class MyTestClass { private static function __constructStatic() { //this will be called once after class loaded } }
要求
无需外部库,只需在项目中使用Composer自动加载器。
安装
将以下内容添加到composer.json
文件的require
块中:"vladimmi/construct-static": "dev-master@dev"
使用方法
$composer = require_once(__DIR__ . '/vendor/autoload.php'); //get Composer loader $loader = new ConstructStatic\Loader($composer); //wrap it
详细信息
Composer自动加载器被注销,并使用这个包装器。然后所有类加载调用都通过这个加载器转到Composer。您可以使用上面示例中的$loader
作为原始的$composer
对象 - 所有方法调用都被代理到包装加载器。
其他可能的自动加载器仍然被注册,所以请检查生成的加载器顺序,以防止出现意外结果。
选项
处理先前加载的类
如果您想调用在包装器创建之前加载的类的静态构造函数,可以使用processLoadedClasses
方法来实现这一点
$composer = require_once(__DIR__ . '/vendor/autoload.php'); $loader = new ConstructStatic\Loader($composer); $loader->processLoadedClasses(); //call constructors on every already loaded class
传递自定义数据到调用的构造函数
您可以将一些数据传递到调用的构造函数中 - 例如,注入服务或传递DI容器。为此,您需要稍微修改构造函数
class MyTestClass { //Added $params parameter private static function __constructStatic($params = []) { //this will be called once after class loaded } }
然后您可以在创建包装加载器时设置所需的数据
$composer = require_once(__DIR__ . '/vendor/autoload.php'); $params = [ //set any needed data here... ]; $loader = new ConstructStatic\Loader($composer, $params); //...and pass it to loader
这些$params
将被传递到每个调用的构造函数。如果您只想将一些参数集传递给指定的类以防止冲突或任何其他原因,您可以通过这种方式设置它们
$composer = require_once(__DIR__ . '/vendor/autoload.php'); $params = [ //set any default data here ]; $anyYourClassParams = [ //set any data for specific class here ]; $loader = new ConstructStatic\Loader($composer, $params); //pass default data to loader $loader->setClassParameters(AnyYourClass::class, $anyYourClassParams); //pass data for specific class to loader
然后当AnyYourClass
被加载时,它将接收到$anyYourClassParams
而不是$params
,而任何其他类将接收到默认设置的$params
。