2013-07-12 51 views
0

我有一個工廠模式是這樣的:創建一個從數組變量,並用它們來調用一個方法不知道變量名PHP

public function ViewFactory implements Factory { 
    public function __construct() { 

    } 

    public static function Create($params) { 
     //does not return variables, only extracts them 
     $p = extract($params, EXTR_PREFIX_ALL, "var_"); 

     //return object of view and pass in all variables extracted from array 
     return new View($p); 
    } 

    *** 
    *** 
} 

interface Factory { 
    public function Create($params); 
    *** 
    *** 
} 

我試着使用提取,但它不只是返回變量我必須使用前綴爲var_的關聯數組中的鍵來訪問它們。是否有可能以某種方式返回數組的所有值作爲逗號分隔的變量,並將其傳遞給函數?

我的視圖類:

class View { 
    public function __construct($path, $parameters, $site_title) { 
     *** 
    }; 
} 
+0

你有他們的舒美特已經在你的變量'$ params'中生成了可通行證。爲什麼要這樣做? – Cfreak

+0

我更新了我的問題,添加了View類的代碼。視圖構造函數需要3個參數,因此當做新的View()時,我需要傳遞3個參數 – GGio

+0

'array_keys'以從$ params數組中獲取密鑰? –

回答

2

我不太清楚,如果這是你所要求的是什麼,但你可以使用ReflectionClass::newInstanceArgs創建一個類的實例,並通過它從一個數組參數:

public static function Create($params) { 
    $class = new ReflectionClass('View'); 
    return $class->newInstanceArgs($params); 
} 
+0

這會返回View類的一個對象嗎?這意味着我的工廠類會以同樣的方式行事嗎? – GGio

+0

這正是它所做的......如果'$ params'包含3個元素,它就相當於@DanyCaissy答案。 – Orangepill

+0

它的作品,我不知道你爲什麼得到-1。這正是我想要的。非常感謝你 – GGio

1

你可以只是他們三個人傳遞給這樣的觀點:

// This will reset the keys in the array, so the keys will now be [0] [1] and [2] 
$p = array_values($p); 

// Pass the values one by one 
return new View($p[0], $p[1], $p[2]); 
+0

這可能是給定已知數量參數的最佳解決方案。 – Orangepill

+0

但我不知道參數的數量我想重用的功能我不會總是知道這是爲什麼我試圖避免通過它的鍵訪問項目的參數數量 – GGio

相關問題