如果您只知道它们的界面,那么在PHP中创建多个对象的最佳做法是什么

时间:2015-12-30 23:00:45

标签: php oop interface

我有一个类来操作具有已定义接口的对象

class TaskManager
{
    /**
     * @param TaskInterface $task
     * @param string $command
     * @return TaskInterface
     */
    public static function editTask($task, $command)
    {
        $task->setStatus(TaskInterface::TASK_STATUS_ACTIVE);
        $task->setCommand($command);   
        $task->taskSave();
        return $task;
    }
}

我可以通过将其实例作为方法参数传递来创建单个对象。这非常简单。但是我应该如何制作其中的许多呢?

public static function export()
{
    $commands = self::getCommandsToAdd();
    foreach($commands as $c){
        //This is wrong.
        $task = new TaskInterface();
        $task->setCommand($c);
        $task->save();
        //don't need to return it if it's saved
    }
}

我不能这样创造它。传递新对象数组显然是一个坏主意。另一种方法是将类名作为字符串传递,并调用其方法来检索新对象。但它似乎也错了

1 个答案:

答案 0 :(得分:1)

我想我自己想出了一个解决方案。可以使用工厂接口传递工厂对象。

interface TaskFactoryInterface
{
     public static function createNew();
}

/**
 * @param TaskFactoryInterface $task_factory
 */
public static function export($task_factory)
{
    $commands = self::getCommandsToAdd();
    foreach($commands as $c){
        $task = $task_factory::createNew();
        $task->setCommand($c);
        $task->save();
        //don't need to return it if it's saved
    }
}

您怎么看?