php支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如 echo,PRint,unset(),isset(),empty(),include,require 以及类似的语言结构。需要使用自己的包装函数来将这些结构用作可变函数。
Example #1 可变函数示例
<?phpfunctionfoo() {echo"In foo()<br />\n";
}functionbar($arg= '') {echo"In bar(); argument was '$arg'.<br />\n";
}//使用 echo 的包装函数functionechoit($string)
{echo$string;
}$func= 'foo';$func();//This calls foo()$func= 'bar';$func('test');//This calls bar()$func= 'echoit';$func('test');//This calls echoit()?>
也可以用可变函数的语法来调用一个对象的方法。
<?phpclassFoo
{functionVariable()
{$name= 'Bar';$this->$name();//This calls the Bar() method}functionBar()
{echo"This is Bar";
}
}$foo=newFoo();$funcname= "Variable";$foo->$funcname();//This calls $foo->Variable()?>
当调用静态方法时,函数调用要比静态属性优先:
Example #3 Variable 方法和静态属性示例
<?phpclassFoo
{static$variable= 'static property';staticfunctionVariable()
{echo'Method Variable called';
}
}echoFoo::$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.?>
可以使用可变函数的方法列表如下:
<?phparray_diff_assoc()
array_diff_key()array_diff_uassoc()array()
array_intersect_ukey()array_map()array_merge()array_merge_recursive()array_multisort()array_push()
array_replace()
array_replace_recursive()array_unshift()call_user_func()call_user_method()compact()
dba_open()
dba_popen()echo()
forward_static_call()fprintf()fscanf()
httprequestpool_construct()
ibase_execute()
ibase_set_event_handler()
ibase_wait_event()isset()list()
maxdb_stmt_bind_param()
maxdb_stmt_bind_result()
mb_convert_variables()
newt_checkbox_tree_add_item()
newt_grid_h_close_stacked()
newt_grid_h_stacked()
newt_grid_v_close_stacked()
newt_grid_v_stacked()
newt_win_choice()
newt_win_entries()
newt_win_menu()
newt_win_message()
newt_win_ternary()pack()printf()register_shutdown_function()register_tick_function()session_register()setlocale()sprintf()sscanf()unset()var_dump()
w32api_deftype()
w32api_init_dtype()
w32api_invoke_function()wddx_add_vars()wddx_serialize_vars()
摘自:http://php.net/manual/zh/functions.variable-functions.php