php 支援可變函式的概念。這意味著如果乙個變數名後有圓括號,php 將尋找與變數的值同名的函式,並且嘗試執行它。可變函式可以用來實現包括**函式,函式表在內的一些用途。
可變函式不能用於例如 echo,print,unset(),isset(),empty(),include,require 以及類似的語言結構。需要使用自己的包裝函式來將這些結構用作可變函式。
example #1 可變函式示例
<?phpfunction
foo()
function bar($arg = '')
//使用 echo 的包裝函式
function echoit($string
)$func = 'foo';
$func(); //
this calls foo()
$func = 'bar';
$func('test'); //
this calls bar()
$func = 'echoit';
$func('test'); //
this calls echoit()
?>
也可以用可變函式的語法來呼叫乙個物件的方法。
<?phpclass
foo
function
bar()
}$foo = new
foo();
$funcname = "variable";
$foo->$funcname(); //
this calls $foo->variable()
?>
當呼叫靜態方法時,函式呼叫要比靜態屬性優先:
example #3 variable 方法和靜態屬性示例
<?phpclass
foo}
echo foo::$variable; //
this prints 'static property'. it does need a $variable in this scope.
$variable = "variable";
foo::$variable(); //
this calls $foo->variable() reading $variable in this scope.
?>
可以使用可變函式的方法列表如下:
摘自:
有關PHP的可變函式
事情的起因是這樣子的,最近看到一道題,問的是 這句 有什麼問題,答案很明顯因為php的可變函式這個特性,導致了任意 執行,但是當時做實驗的時候構造的a eval b phpinfo 卻返回了如下的結果 提示eval是個未定義的函式,然後改用了a assert b phpinfo 卻能執行成功,為此查...
php呼叫可變函式,PHP呼叫參數量可變的函式
所以我遇到了一些問題。我知道乙個解決方案,但它看起來不太乾淨,我想知道是否有更好的解決方案。我正在編寫乙個mysqli包裝器,用於執行準備好的語句。因為它是乙個包裝器,可以重用 動態 返回的列數取決於查詢,並且不是靜態的。我已經找到了乙個解決這個問題的方法,似乎每個人都在使用 call user f...
php 可變函式用法
function func myfunction func 當我們建立了自定義函式,並且了解了可變函式的用法,為了確保程式呼叫的函式是存在的,經常會先使用function exists判斷一下函式是否存在。同樣的method exists可以用來檢測類的方法是否存在。if function exis...