PHP中文手册

版权信息

PHP 手册

入门指引

安装与配置

语言参考

安全

特点

函数参考

PHP 核心:骇客指南

FAQ

附录

可变函数

PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

可变函数不能用于例如 echo print unset() isset() empty() include require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。

Example #1 可变函数示例

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

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

// 使用 echo 的包装函数
function  echoit ( $string )
{
    echo 
$string ;
}

$func  'foo' ;
$func ();         // This calls foo()

$func  'bar' ;
$func ( 'test' );   // This calls bar()

$func  'echoit' ;
$func ( 'test' );   // This calls echoit()
?>

也可以用可变函数的语法来调用一个对象的方法。

Example #2 可变方法范例

<?php
class  Foo
{
    function 
Variable ()
    {
        
$name  'Bar' ;
        
$this -> $name ();  // This calls the Bar() method
    
}

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

$foo  = new  Foo ();
$funcname  "Variable" ;
$foo -> $funcname ();    // This calls $foo->Variable()

?>

当调用静态方法时,函数调用要比静态属性优先:

Example #3 Variable 方法和静态属性示例

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

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.

?>

参见 is_callable() call_user_func() 可变变量 function_exists()