charcoal / factory
炭对象创建(工厂、抽象工厂、构建器、类解析器)
v5.0.0
2024-03-13 15:05 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.2
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
Replaces
This package is auto-updated.
Last update: 2024-09-13 16:14:29 UTC
README
工厂包提供抽象对象工厂以创建对象。
安装
composer require charcoal/factory
用法
工厂可以将类型解析为FQN,并使用可选的参数集创建该类的实例,同时确保默认基类。
工厂选项应直接从构造函数设置
$factory = new Charcoal\Factory\GenericFactory([ // Ensure the created object is a Charcoal Model 'base_class' => '\Charcoal\Model\ModelInterface', // An associative array of class map (aliases) 'map' => [ 'foo' => '\My\Foo', 'bar' => '\My\Bar', ], // Constructor arguments 'arguments' => [ $dep1, $dep2, ], // Object callback 'callback' => function ($obj) { $obj->do('foo'); }, ]); // Create a "\My\Custom\Baz" object with the given arguments + callbck $factory->create('\My\Custom\Baz'); // Create a "\My\Foo" object (using the map of aliases) $factory->create('foo'); // Create a "\My\Custom\FooBar" object with the default resolver $factory->create('my/custom/foo-bar');
构造函数选项(类依赖)是
注意
- [1] 如果未提供解析器,将使用默认的
\Charcoal\Factory\GenericResolver
。
类解析器
发送到 create()
方法的类型(类标识符)可以通过自定义的 Callable
解析器进行解析/解析。
如果构造函数未传递 resolver
,则使用默认的 \Charcoal\Factory\GenericResolver
。此默认解析器将 my/custom/foo-bar
转换为 \My\Custom\FooBar
等。
类映射和别名
可以通过在工厂构造函数中设置它们来添加类别名。
$factory = new GenericFactory([ 'map' => [ 'foo' => '\My\Foo', 'bar' => '\My\Bar', ], ]); // Create a `\My\Foo` instance $obj = $factory->create('foo');
确保对象类型
可以通过设置 base_class
属性来确保对象类型。
设置基类的推荐方法是将其设置在构造函数中
$factory = new GenericFactory([ 'base_class' => '\My\Foo\BaseClassInterface', ]);
👉 注意,接口 也可以用作工厂的基类。
设置默认对象类型
可以通过设置 default_class
属性来设置默认对象类型(默认类)。
设置默认类的推荐方法是在构造函数中设置它
$factory = new GenericFactory([ 'default_class' => '\My\Foo\DefaultClassInterface', ]);
⚠️ 设置默认类名将更改标准工厂行为。当使用无效类名时,而不是抛出
Exception
,将始终返回默认类类型的对象。
构造函数参数
可以设置“自动”构造函数参数,这些参数将传递给每个创建的对象。
设置构造函数参数的推荐方法是将参数数组传递给构造函数
$factory = new GenericFactory([ 'arguments' => [ [ 'logger' => $container['logger'], ], $secondArgument, ], ]);
执行对象回调
可以在对象实例化时执行对象回调。回调是任何接受新创建的对象引用作为其函数参数的 Callable
。
// $obj is the newly created object function callback($obj): void;
添加对象回调的推荐方法是将 Callable
传递给构造函数
$factory = new GenericFactory([ 'arguments' => [[ 'logger' => $container['logger'] ]], 'callback' => function ($obj) { $obj->foo('bar'); $obj->logger->debug('Objet instanciated from factory.'); } ]);