可变函数:
php支持可变函数的概念,这意味着如果一个变量名后面有圆括号,php将寻找与变量的值相同的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。
可变函数不能用于例如echo print unset() isset() empty() include,require以及类似的语言结构,需要使用自己包装函数来将这些结构用作可变函数。
class Foo{ function test(){ $name = "say"; $this->$name(); } function say(){ echo "this is class foo function say"; } } $foo = new Foo(); $funcName = "test"; $foo->$funcName();
嵌套函数:
当外部的函数被调用的时候,内部的函数就会自动进入全局域中,成为新的定义函数
function out(){
if(! function_exists("in")){
function in(){
echo "如果外面的函数没有被调用的话,我是不存在的";
}
}
}
out();
in();
递归函数
函数在它的函数体内调用它自身,这种函数成为递归函数
<?php
function recursive($i){
$sum = 1;
echo "当前recursive()函数调用\$i的值是 {$i}\n";
if($i == 1){
echo "当前\$i的值是 {$i} \$sum = {$sum}\n";
return 1;
}else{
$sum = $i * recursive($i-1);
}
echo "\$i = {$i};\$sum = {$sum};\n";
return $sum;
}
echo recursive(3);
匿名函数/闭包函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许临时创建一个没有
指定名称的函数,最常用作回调函数(callback)参数的值。
匿名函数目前是通过Closure类来实现的
<?php
function test_closure($name,Closure $clo){
echo "hello {$name}\n";
$clo();
};
test_closure("xiaowang",function(){
echo "welcome to this page";
});