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