gpt4 book ai didi

php - 将 symfony 的依赖注入(inject)组件与其他 php 类一起使用

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:28 25 4
gpt4 key购买 nike

我有点困惑。我使用服务容器创建引导文件:

require_once '/path/to/lib/sfServiceContainerAutoloader.php';
sfServiceContainerAutoloader::register();

$sc = new sfServiceContainerBuilder();

$sc->register('database', 'PDO')->
addArgument('mysql:host=localhost;dbname=my_dbname')->
addArgument('user')->
addArgument('password')->
addArgument(array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

我现在想创建一个类并使用数据库

class Foo {
functon runSomeQuery() {
// Here I want to use database
}
}

我怎样才能以一种优雅的方式做到这一点?

最佳答案

你可以试试:

class Foo {

/**
* @var PDO
*/
private $_adapter = null;

public function __construct(PDO $adapter = null) {
if (!$adapter) {
// assuming you have your generated DI container set there
$this->_adapter = Zend_Registry::get('diContainer')->getDatabase();
} else {
$this->_adapter = $adapter;
}
}
}

你也可以用其他类似的方式来实现,比如 implement setAdapter(PDO $adapter)。好吧,无论如何,你明白了。或者你可以像这样使用它:

public function __construct() {
// assuming you have your generated DI container set there
$this->_adapter = Zend_Registry::get('diContainer')->getDatabase();
}

有很多方法可以很好地做到这一点,这取决于您真正想要的一切。基本相当不错的选择:
1. 通过构造函数注入(inject) + 在构造函数中(以防未作为构造函数参数提供)
2. 仅通过DI容器注入(inject)构造函数
3. 单独注入(inject)
4.取决于你在做什么/想做什么,可能只是通过 DI 容器获取注册服务并使用它,不要将它保存在类中。 (示例:
Zend_Registry::get('diContainer')->getDatabase()->prepare('>>SQL<<');

关于php - 将 symfony 的依赖注入(inject)组件与其他 php 类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com