添加自定义类/方法


Adding custom classes / methods

我在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关键字是无效的类,它不是一个对象(即未实例化)-所以我可以实例化类,然后调用方法class->loadDataFromCSV -下一个问题是$this->configuration在第一行-我必须在配置中传递给方法,以使其工作?

创建一个简单的方法来运行一段简单的代码,而不需要传递大量的变量,最简单的方法是什么?

简短的回答:使用DI容器

长回答:你基本上是问如何设置对象依赖,因为你的类依赖于配置对象。有两种方法可以做到。在类中硬编码依赖关系。例如Registry::getInstance()->get('config');和使用依赖注入。只要你可以传递任何配置实例,依赖注入是更好的解决方案。现有对象、新对象、用于单元测试的模拟对象或其他配置实现。有两种类型的依赖注入。通过构造函数(例如new Object(new Dependency())))或通过setter注入依赖。

$o = new Object();
$o->setDependency($dependency);

如果你的对象有很多依赖关系,代码可能会变得难以读懂。解决方案是使用依赖注入容器,它会自动为你注入所有的依赖。您的客户端代码仍然是一行:DIContainer::create('object');。Create方法创建一个类的实例,注入所有依赖项并返回对象。

对于使用静态方法的方法,您应该:

  1. 在self::
  2. 上替换所有这些->关键字
  3. 移动所有的配置设置在一个文件中,并加载它们,例如config类,将实现模式单例。
  4. 调用看起来像Config::getInstance()->getSection('your_section');

关于数据库初始化:

  1. 用2个静态方法创建注册表类set/get
  2. 在引导文件中创建DB对象。
  3. 使用$connection = Registry::get('db')->getConnection();