可變函數(shù)

PHP 支持可變函數(shù)的概念。這意味著如果一個變量名后有圓括號,PHP 將尋找與變量的值同名的函數(shù),并且嘗試執(zhí)行它??勺兒瘮?shù)可以用來實現(xiàn)包括回調(diào)函數(shù),函數(shù)表在內(nèi)的一些用途。

可變函數(shù)不能用于例如 echo,print,unset()isset(),empty()include,require 以及類似的語言結(jié)構(gòu)。需要使用自己的包裝函數(shù)來將這些結(jié)構(gòu)用作可變函數(shù)。

示例 #1 可變函數(shù)示例

<?php
function foo() {
    echo 
"In foo()<br />\n";
}

function 
bar($arg '')
{
    echo 
"In bar(); argument was '$arg'.<br />\n";
}

// 使用 echo 的包裝函數(shù)
function echoit($string)
{
    echo 
$string;
}

$func 'foo';
$func();        // 調(diào)用 foo()

$func 'bar';
$func('test');  // 調(diào)用 bar()

$func 'echoit';
$func('test');  // 調(diào)用 echoit()
?>

也可以用可變函數(shù)的語法來調(diào)用一個對象的方法。

示例 #2 可變方法范例

<?php
class Foo
{
    function 
Variable()
    {
        
$name 'Bar';
        
$this->$name(); // 調(diào)用 Bar() 方法
    
}

    function 
Bar()
    {
        echo 
"This is Bar";
    }
}

$foo = new Foo();
$funcname "Variable";
$foo->$funcname();  // 調(diào)用 $foo->Variable()

?>

當調(diào)用靜態(tài)方法時,函數(shù)調(diào)用要比靜態(tài)屬性優(yōu)先:

示例 #3 Variable 方法和靜態(tài)屬性示例

<?php
class Foo
{
    static 
$variable 'static property';
    static function 
Variable()
    {
        echo 
'Method Variable called';
    }
}

echo 
Foo::$variable// 打印 'static property'。在該作用域中需要 $variable。
$variable "Variable";
Foo::$variable();  // 在該作用域中讀取 $variable 調(diào)用 $foo->Variable()。

?>

示例 #4 復雜調(diào)用

<?php
class Foo
{
    static function 
bar()
    {
        echo 
"bar\n";
    }
    function 
baz()
    {
        echo 
"baz\n";
    }
}

$func = array("Foo""bar");
$func(); // 打印 "bar"
$func = array(new Foo"baz");
$func(); // 打印 "baz"
$func "Foo::bar";
$func(); // 打印 "bar"
?>