我在Symfony 1.4中创建了一个任务,将一些CSV文件加载到表格中 - 非常简单 - >
protected function execute($arguments = array(), $options = array())
{
$databaseManager = new sfDatabaseManager($this->configuration);
$connection = $databaseManager->getDatabase($options['connection'])->getConnection();
......
$query = "LOAD DATA INFILE '" . $cdrfile . "'
INTO TABLE ....
etc
$connection->execute($query);
}
但是我想在其他地方重用这段代码 - 所以我创建了一个新的PHP类并创建了一个名为loadDataFromCSV
的新静态方法。
我将所有代码放入该方法,然后调用class::loadDataFromCSV
...
这给了我一些问题 - 首先方法中的$this
关键字无效,因为它不是一个对象(即没有实例化) - 所以我可以实例化该类,然后调用方法{{1 - 下一个问题是第一行的class->loadDataFromCSV
- 我是否必须将配置传递给方法才能使其正常工作?
最简单的方法是创建一个简单的方法来运行一段简单的代码 - 而不必传递大量的变量。
答案 0 :(得分:2)
简答:使用DI容器。
答案很长:您基本上会问如何设置对象依赖项,因为您的类依赖于配置对象。有两种方法可以做到这一点。你班级的硬编码依赖。例如Registry::getInstance()->get('config');
并使用依赖注入。只要您可以传递任何配置实例,依赖注入就是更好的解决方案。现有对象,新对象,单元测试的模拟对象或其他配置实现。有两种类型的依赖注入。通过构造函数注入依赖项(例如new Object(new Dependency()))
或通过setter。
$o = new Object();
$o->setDependency($dependency);
如果您的对象具有许多依赖项,则代码可能在两种方式下都变得难以理解。解决方案是使用依赖注入容器,它自动为您注入所有依赖项。您的客户端代码仍然只有一行:DIContainer::create('object');
。 Create方法创建一个类实例,注入所有依赖项并返回该对象。
答案 1 :(得分:0)
要使用静态方法,您应该:
关于数据库初始化: