回答
還有就是要做到這一點不止一種方法:
$this->{$methodName}($arg1, $arg2, $arg3);
$this->$methodName($arg1, $arg2, $arg3);
call_user_func_array(array($this, $methodName), array($arg1, $arg2, $arg3));
你甚至可以使用反射API http://php.net/manual/en/class.reflection.php
我想也許我確實擁有正確的語法,所以我的代碼有其他問題,因爲它的功能不正常。嗯... – VirtuosiMedia 2008-10-30 20:00:52
只要省略括號:
$this->$methodName($arg1, $arg2, $arg3);
謝謝。我曾經想過,但還沒有嘗試過。 – VirtuosiMedia 2008-10-30 19:51:37
您還可以使用call_user_func()
和call_user_func_array()
如果你在PHP的一個類中工作,那麼我會建議在PHP5中使用重載的__call函數。你可以找到參考here。
基本上__call爲動態函數做什麼__set和__get爲PHP OO中的變量做了什麼。
在我的情況。
$response = $client->{$this->requestFunc}($this->requestMsg);
使用PHP SOAP。
我不知道但要小心安全問題 – tom10271 2016-02-02 01:39:15
可以在單個變量使用封閉儲存方法:
class test{
function echo_this($text){
echo $text;
}
function get_method($method){
$object = $this;
return function() use($object, $method){
$args = func_get_args();
return call_user_func_array(array($object, $method), $args);
};
}
}
$test = new test();
$echo = $test->get_method('echo_this');
$echo('Hello'); //Output is "Hello"
編輯:我編輯的代碼,現在是用PHP 5.3兼容。另一個例子here
這些年後仍然有效!確保您修剪$ methodName,如果它是用戶定義的內容。我無法獲得$ this - > $ methodName的工作,直到我發現它有一個領先的空間。
可以使用重載在PHP中: Overloading
class Test {
private $name;
public function __call($name, $arguments) {
echo 'Method Name:' . $name . ' Arguments:' . implode(',', $arguments);
//do a get
if (preg_match('/^get_(.+)/', $name, $matches)) {
$var_name = $matches[1];
return $this->$var_name ? $this->$var_name : $arguments[0];
}
//do a set
if (preg_match('/^set_(.+)/', $name, $matches)) {
$var_name = $matches[1];
$this->$var_name = $arguments[0];
}
}
}
$obj = new Test();
$obj->set_name('Any String'); //Echo:Method Name: set_name Arguments:Any String
echo $obj->get_name();//Echo:Method Name: get_name Arguments:
//return: Any String
- 1. 動態調用PHP類方法
- 2. 動態調用類方法
- 3. 如何動態調用PHP中的類方法?
- 4. 動態調用類方法的參數
- 5. 調用JUNIT類的動態方法
- 6. 如何在PHP 5中動態調用子類方法?
- 7. PHP:調用類靜態方法與動態類名稱前PHP 5.3
- 8. PHP中的動態靜態方法調用?
- 9. 當在PHP中調用任何類的方法時自動調用方法
- 10. 動態執行std類的方法php
- 11. 調用靜態類方法
- 12. PHP調用類的靜態方法的類名
- 13. 從非靜態類動態調用非靜態方法的最簡單方法?
- 14. 調用類類型的靜態方法
- 15. 動態調用DLL中的方法
- 16. OOP中的動態方法調用
- 17. 動態調用模塊中的方法?
- 18. PHP - 調用類方法
- 19. PHP OOP - 從類內的另一個類調用靜態方法
- 20. 調用動態方法
- 21. 動態方法調用
- 22. 動態方法調用
- 23. 「動態」方法調用
- 24. 動態方法調用?
- 25. 從調用的方法在父類中派生的靜態方法在PHP
- 26. 如何動態調用PHP中的方法?
- 27. 動態php方法
- 28. Bean方法調用:動態的方式
- 29. 從靜態基類方法調用靜態派生類方法
- 30. 調用動態類型的非靜態泛型方法
是它原來的問題?我正在尋找動態調用方法,我發現這個問題。它的語法與andy.gurin給出的語法相同,我沒有看到顯示問題更新的鏈接。無論如何...感謝有問題和感謝的貢獻者:-) – 2009-07-30 01:43:47
@Luc - 這是原來的問題。事實證明,當我問我的時候我的語法正確,但是我的代碼有其他問題,所以它不起作用。 – VirtuosiMedia 2009-07-30 08:09:03