2011-03-24 68 views
0

例如,$_GET包含id=10, var=100。我怎樣才能提取並將它們傳遞給構造函數public function __construct($id, $var)就像這樣new Test(extract($_GET));

+1

你可能想要$ _POST一些被接受的答案。 – 2011-03-24 23:09:34

+0

是的,當您發現它們有幫助/正確時,請接受答案。 此外,你是否想通過關鍵和價值,或只是價值? – 2011-03-24 23:15:02

回答

0

將構造函數更改爲__construct($ array);並在construtor中設置你的變量。這不是很漂亮,我不會推薦它,但它會起作用。

+0

你會如何推薦? – Tuco 2011-03-24 23:12:27

1

我認爲你知道你從URL中尋找什麼值?

$ _GET in PHP只是一個關聯數組。所以,如果我的網址是這樣的:

http://example.com/index.php?var1=foo&var2=bar 

我能得到像這樣的變量:

​​

小心$ _GET,因爲沒有安全保障是防止我改變我的網址欄

http://example.com/index.php?var1=foo&var2=[malicious code] 

所以你應該總是把它視爲不可信。

+0

他希望鍵和值都傳遞給構造函數。不只是價值。 – Rasika 2011-03-24 23:12:49

+0

這不是我怎麼讀這個問題...... – 2011-03-24 23:14:20

0

$_GET是一個關聯數組。因此,您可以從$_GET獲取key以獲取變量名稱。值很明顯$_GET['key']

3

使用ReflectionMethodreflection API檢查什麼是__construct()方法的簽名。

class MyClass { 
     public function __construct($id, $title, $slug = null) { 
       var_dump($id, $title, $slug); 
     } 
} 

$object = new MyClass(); 

$method = new ReflectionMethod($object, '__construct'); 
$parameters = $method->getParameters(); 

$parameters包含ReflectionParameter對象的數組。

現在,你需要準備的參數數組將由ReflectionMethod::invokeArgs()使用:

$invokeParameters = array(); 

foreach ($parameters as $parameter) { 
    $value = $_REQUEST[$parameter->getName()]; 

    $invokeParameters[$parameter->getPosition()] = $value; 
} 

$method->invokeArgs($object, $invokeParameters); 

當然,你應該添加一些條件,如果不檢查是否內$_REQUEST存在的所有強制性參數,拋出異常,等等。