复杂函数
可变函数:
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"; });