PHP 支持可變函數(shù)的概念。這意味著如果一個(gè)變量名后有圓括號,PHP 將尋找與變量的值同名的函數(shù),并且嘗試執(zhí)行它??勺兒瘮?shù)可以用來實(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)用一個(gè)對象的方法。
示例 #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()
?>
當(dāng)調(diào)用靜態(tài)方法時(shí),函數(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 復(fù)雜調(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"
?>