2015-12-30 49 views
2

我有一類通過將其實例作爲方法參數來操作對象與定義的接口什麼是PHP的最佳實踐來創建多個對象,如果你只知道他們的接口

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

應('公開狀態函數引出()'),它是'static'或'status'? – Script47

+0

是的,它是靜態的,對不起 – MUlt1mate

回答

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 
    } 
} 

您怎麼看?

相關問題