多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 可变函数 PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。 可变函数不能用于例如 [echo](http://php.net/manual/zh/function.echo.php),[print](http://php.net/manual/zh/function.print.php),[unset()](http://php.net/manual/zh/function.unset.php),[isset()](http://php.net/manual/zh/function.isset.php),[empty()](http://php.net/manual/zh/function.empty.php),[include](http://php.net/manual/zh/function.include.php),[require](http://php.net/manual/zh/function.require.php) 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。 **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. ?> ``` As of PHP 5.4.0, you can call any [callable](http://php.net/manual/zh/language.types.callable.php) stored in a variable. **Example #4 Complex callables** ``` <?php class Foo {     static function bar()     {         echo "bar\n";     }     function baz()     {         echo "baz\n";     } } $func = array("Foo", "bar"); $func(); // prints "bar" $func = array(new Foo, "baz"); $func(); // prints "baz" $func = "Foo::bar"; $func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error ?> ``` 参见 [is\_callable()](http://php.net/manual/zh/function.is-callable.php),[call\_user\_func()](http://php.net/manual/zh/function.call-user-func.php),[可变变量](http://php.net/manual/zh/language.variables.variable.php)和 [function\_exists()](http://php.net/manual/zh/function.function-exists.php)。