添加自定义类/方法

时间:2011-08-25 10:11:03

标签: php symfony1

我在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 - 我是否必须将配置传递给方法才能使其正常工作?

最简单的方法是创建一个简单的方法来运行一段简单的代码 - 而不必传递大量的变量。

2 个答案:

答案 0 :(得分:2)

简答:使用DI容器。

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

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

如果您的对象具有许多依赖项,则代码可能在两种方式下都变得难以理解。解决方案是使用依赖注入容器,它自动为您注入所有依赖项。您的客户端代码仍然只有一行:DIContainer::create('object');。 Create方法创建一个类实例,注入所有依赖项并返回该对象。

答案 1 :(得分:0)

要使用静态方法,您应该:

  1. 替换所有这些 - > self ::
  2. 上的关键字
  3. 将所有配置设置移动到一个文件中并加载到例如Config类中,这将实现模式Singleton。
  4. 调用看起来像Config :: getInstance() - > getSection('your_section');
  5. 关于数据库初始化:

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