samejack / point-core
PHP IoC/DI 容器框架
1.0.3
2019-03-18 08:56 UTC
Requires
- php: >=5.3.0
Requires (Dev)
- php: >=5.3.0
- php-coveralls/php-coveralls: 2.*@stable
- phpunit/phpunit: 3.7.*@stable
- squizlabs/php_codesniffer: 1.4.*@stable
README
概览
这是一个 PHP IoC/DI 模块容器。它可以通过 PHPDoc 上的 @Annotation 注入对象实例。
特性
- 依赖注入
- 控制反转
- 文件/类懒加载
- 通过 PHP 注解进行配置
- 丰富的模块框架
获取和启动(composer)
从 composer 仓库安装 point-core
composer require samejack/point-core
从上下文中获取第一个对象
<?php include 'vendor/autoload.php'; use point\core\Context; use point\core\Bean; class Bar { public function __toString() { return 'Bar!'; } } $context = new Context(); $context->addConfiguration(array( array( Bean::CLASS_NAME => 'Bar' ) )); $bar = $context->getBeanByClassName('Bar'); echo $bar; // print Bar!
注解规范
Bean 配置
PHP 示例(代码片段)
一般注入
<?php use point\core\Context; use point\core\Bean; class Foo { /** * @Autowired * @var Bar */ private $_bar; public function getBar() { return $this->_bar; } } class Bar { } $context = new Context(); $context->addConfiguration(array( array( Bean::CLASS_NAME => 'Foo' ), array( Bean::CLASS_NAME => 'Bar' ) )); $foo = $context->getBeanByClassName('Foo'); var_dump($foo->getBar()); // print Class Bar
注入之后
<?php use point\core\Context; use point\core\Bean; class Foo { /** * @Autowired * @var Bar */ private $_bar; public function getBar() { return $this->_bar; } } $context = new Context(); $context->addConfiguration(array( array( Bean::CLASS_NAME => 'Foo' ) )); $foo = $context->getBeanByClassName('Foo'); var_dump($foo->getBar()); // print NULL on unload Bar Class // load Bar class class Bar { } // set configuration $context->addConfiguration(array( array( Bean::CLASS_NAME => 'Bar' ) )); var_dump($foo->getBar()); // print Class Bar
通过 Bean ID 注入
use point\core\Context; use point\core\Bean; class Foo { /** * @Qualifier("bar.2") * @var Bar */ private $_bar; public function getBar() { return $this->_bar; } } class Bar { private $_name; public function __construct($name) { $this->_name = $name; } public function toString() { return $this->_name; } } $context = new Context(); $context->addConfiguration(array( array( Bean::CLASS_NAME => 'Foo' ), array( Bean::CLASS_NAME => 'Bar', Bean::ID => 'bar.1', Bean::CONSTRUCTOR_ARG => ['i am first.'] ), array( Bean::CLASS_NAME => 'Bar', Bean::ID => 'bar.2', Bean::CONSTRUCTOR_ARG => ['i am second.'] ) )); $foo = $context->getBeanByClassName('Foo'); var_dump($foo->getBar()); // print Class Bar
PDODB 注入示例
class MyControllerA { /** * @Autowired * @var PDO */ private $_pdo; public function getPdo() { return $this->_pdo; } } class MyControllerB { /** * @Autowired * @var PDO */ private $_pdo; public function getPdo() { return $this->_pdo; } } $context = new Context(); $context->addConfiguration(array( array( Bean::CLASS_NAME => 'MyControllerA' ), array( Bean::CLASS_NAME => 'MyControllerB' ), array( Bean::CLASS_NAME => 'PDO', Bean::CONSTRUCTOR_ARG => ['mysql:host=localhost;dbname=mysql', 'root', 'password!'] ) )); $ctrlA = $context->getBeanByClassName('MyControllerA'); var_dump($ctrlA->getPdo()); // print: class PDO#11 (0)... $ctrlB = $context->getBeanByClassName('MyControllerB'); var_dump($ctrlB->getPdo()); // print: class PDO#11 (0)...
许可证
Apache License 2.0