我想在PHP中創建一個函數並在不知道函數名的情況下調用它。調用函數時不知道名字
這可能嗎?
例子:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
我想在PHP中創建一個函數並在不知道函數名的情況下調用它。調用函數時不知道名字
這可能嗎?
例子:
<?php
$functionName = "someName";
$this->$functionName();
function someName(){
echo("Print Message");
}
?>
它看起來像你想call_user_func()
。
$functionName = "someName";
call_user_func($functionName); //calls `someName()`
可以使用類似下面的其中輸出是印刷消息 「你好,世界!」:
function someName($val){
return $val;
}
$functionName = "someName";
echo call_user_func($functionName, "Hello, World!");
注:如果您在使用新版本的PHP,你也可以使用@J.Bruni指出的可加密:
$functionName = "someName";
$functionName(); //also calls `someName()`
我試了兩種選擇,兩種作品都非常有用,謝謝 –
使用帖子旁邊的複選標記來選擇答案 – jeremy
「可馴化」並不是什麼新鮮事。它們可用很長時間。自PHP 4.0.6起,「is_callable」函數可用。事實是,新的「可卡因」文檔頁面比以前嚴重得多...我在回答鏈接後粘貼了這個不愉快的驚喜......我想鏈接的頁面不再存在了! –
call_user_func()解決您的問題!
$function = 'myOwnFunction';
call_user_func($functionname);
,並避免致命的錯誤,你
function_exists($function);
吧!
是的,這很簡單:
$functionName();
然而,你還有其他幾個選項,允許更多複雜的東西。請檢查:
http://php.net/manual/en/language.types.callable.php
的例子集合:
function test() { echo 'hello 1'; }
class Something { function test() { echo 'hello 2'; } }
class Other { static function test() { echo 'hello 3'; } }
$functionName = 'test';
$object = new Something();
$className = 'Other';
// three ways to call function "test", showing how to pass parameters
$functionName($param1, $param2);
call_user_func($functionName, $param1, $param2);
call_user_func_array($functionName, array($param1, $param2));
// two ways to call "Something::test"
$object->$functionName();
call_user_func(array($object, $functionName));
// a way to call "Other::test"
call_user_func(array($className, $functionName));
重要:你需要之前聲明函數調用它。 (在你的問題,你後聲明函數試圖調用它。這是行不通的。)
爲了避免錯誤,你可以使用函數is_callable
覈實,如果一個函數/方法之前實際上是調用稱它。
這是最好的方法imo。對於這種情況,沒有理由使用'call_user_func',儘管你應該使用'function_exists'來檢查函數的存在。 –
是的,當然。你當然不需要**'call_user_func'來查詢所要求的內容。在幾種情況下它可能很有用,但是當然你可以使用一個字符串變量來調用一個函數而不用它。 –
我嘗試了兩種選擇,這兩種作品,你和@Nile,真的很有幫助,謝謝 –
你有沒有試過看? – andrewsi
'不知道函數的名字'? – xdazz