PHP的學習 可變函式

2022-02-07 14:34:32 字數 2638 閱讀 8627

php 支援可變函式的概念。這意味著如果乙個變數名後有圓括號,php 將尋找與變數的值同名的函式,並且嘗試執行它。可變函式可以用來實現包括**函式,函式表在內的一些用途。

可變函式不能用於例如 echo,print,unset(),isset(),empty(),include,require 以及類似的語言結構。需要使用自己的包裝函式來將這些結構用作可變函式。

example #1 可變函式示例

<?php

function

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()

?>

也可以用可變函式的語法來呼叫乙個物件的方法。

<?php

class

foo

function

bar()

}$foo = new

foo();

$funcname = "variable";

$foo->$funcname(); //

this calls $foo->variable()

?>

當呼叫靜態方法時,函式呼叫要比靜態屬性優先:

example #3 variable 方法和靜態屬性示例

<?php

class

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...