例如,$_GET
包含id=10, var=100
。我怎樣才能提取並將它們傳遞給構造函數public function __construct($id, $var)
就像這樣new Test(extract($_GET));
回答
將構造函數更改爲__construct($ array);並在construtor中設置你的變量。這不是很漂亮,我不會推薦它,但它會起作用。
你會如何推薦? – Tuco 2011-03-24 23:12:27
我認爲你知道你從URL中尋找什麼值?
$ _GET in PHP只是一個關聯數組。所以,如果我的網址是這樣的:
http://example.com/index.php?var1=foo&var2=bar
我能得到像這樣的變量:
小心$ _GET,因爲沒有安全保障是防止我改變我的網址欄
http://example.com/index.php?var1=foo&var2=[malicious code]
所以你應該總是把它視爲不可信。
他希望鍵和值都傳遞給構造函數。不只是價值。 – Rasika 2011-03-24 23:12:49
這不是我怎麼讀這個問題...... – 2011-03-24 23:14:20
$_GET
是一個關聯數組。因此,您可以從$_GET
獲取key以獲取變量名稱。值很明顯$_GET['key']
使用ReflectionMethod
從reflection 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
存在的所有強制性參數,拋出異常,等等。
- 1. 將函數傳遞給構造函數
- 2. 將構造函數傳遞給函數
- 3. Java:Spring:如何動態地將params傳遞給構造函數?
- 4. 將結構傳遞給構造函數
- 5. 將數據傳遞給構造函數
- 6. 將參數傳遞給構造函數
- 7. PHP從數組中提取值並將它們傳遞給函數
- 8. 將enum傳遞給構造函數
- 9. 將std :: shared_ptr傳遞給構造函數
- 10. 將NULL傳遞給構造函數
- 11. 將事件傳遞給構造函數
- 12. 將ImageView傳遞給構造函數
- 13. 將$ _GET變量傳遞給javascript函數
- 14. 將數組傳遞給構造函數而不聲明它?
- 15. jQuery自定義函數並將參數傳遞給它們
- 16. 將函數傳遞給javascript構造函數
- 17. 將所有參數傳遞給類構造函數並將參數傳遞給成員函數
- 18. 將函數應用於列表並將其結果傳遞給構造函數?
- 19. MVC:捕獲路由url並將它們傳遞給javascript函數
- 20. 使用Simple Injector將構造函數傳遞給構造函數abd WebFormsMVP
- 21. 提取參數,並將它們傳遞到數據庫
- 22. 將文件傳遞給構造函數以讀取
- 23. 將參數從不同的構造函數傳遞給類構造函數?
- 24. 如何從主構造函數將參數傳遞給父構造函數?
- 25. 傳遞給構造函數時出錯
- 26. 傳遞字典給構造函數?
- 27. 將結構傳遞給一個函數並分配它
- 28. 將對象函數傳遞給對象構造函數
- 29. 將函數指針傳遞給構造函數C++
- 30. 如何將函數傳遞給構造函數
你可能想要$ _POST一些被接受的答案。 – 2011-03-24 23:09:34
是的,當您發現它們有幫助/正確時,請接受答案。 此外,你是否想通過關鍵和價值,或只是價值? – 2011-03-24 23:15:02