我有一个类来操作具有已定义接口的对象
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
}
}
我不能这样创造它。传递新对象数组显然是一个坏主意。另一种方法是将类名作为字符串传递,并调用其方法来检索新对象。但它似乎也错了
答案 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
}
}
您怎么看?