PHP for高级用法,PHP 自定义函数高级用法

回调函数

回调函数,可以配合匿名函数和变量函数实现更加优美、复杂的一种函数结构。

回调函数,就是在处理一个功能的时候,让这个功能自定义能力再强一些, 准许调用这个函数的时候,还可以传入一个函数配合、协助进行处理。<?php

function woziji($one, $two, $func)

{

//规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false

if(!is_callable($func))

{

return false;

}

//把$one、$two相加,再把$one和$two传入$func这个函数中处理一次

//$func是一个变量函数,参见变量函数

echo $one + $two + $func($one,$two);

}

//我们定义几个函数试试

function plusx2($foo ,$bar)

{

$result = ($foo+$bar)*2;

return $result;

}

function jian($x, $y)

{

$result = $x - $y;

return $result;

}

//调用一下函数,woziji,向里面传入参数试试

echo woziji(20,10,'plusx2');   // 输出结果为 90

//将plusx2改成jian试试结果

echo woziji(20,10,'jian');   //输出结果为 40

?>

处理过程是这样的:

将20赋值给形参$one,10赋值给了$two,而plusx2或者jian这两个变量函数,赋值给了$func

在woziji这个函数中判断plusx2或者jian是否为函数,不是函数就return false 停止执行了

显示plusx2或者jian是函数。因此$one = 20, $two =10相加了,相加后,$one和$two又带入到了了$func($one,$two)中。

带入至里面后而$func,是可变的,可以为plusx2或者jian。如果为plusx2的话,$one = 20,$two = 10 的这个两个结果又给了plusx2函数里面的$foo和$bar

$foo + $bar 乘以2后将结果返回至woziji这个函数功能体的运算处:$one + $two + $func($one,$two);

这样主得到了运算结果

现在我们明白了回调函数:在一个调数里面,再传入一个函数名,将函数名加上()括号。识为变量函数,配合执行。

变量函数

可变函数,我们也会称呼为变量函数

变量函数的用法是这样的:<?php

function demo()

{

echo '天王盖地虎';

}

function test()

{

echo '小鸡炖蘑菇';

}

$fu = 'demo';

//把$fu变为了demo,把demo后加上了一个括号,就执行函数了

$fu();   // 输出为 天王盖地虎

//把$fu的值改为test字符串再试试?

?>

匿名函数

有时候某个函数对于我们来说仅仅是为了某些临时的处理,函数没有复用的必要,起个名字是很麻烦的事情,所以需要匿名函数来处理

匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量。

匿名函数的第一种用法,直接把赋数赋值给变量,调用变量即为调用函数。

变量函数式的匿名函数<?php

$greet = function($name)

{

echo $name.',你好';

};

$greet('明天');  //输出 明天,你好

$greet('PHP');   // 输出 PHP,你好

?>

回调式的匿名函数<?php

function woziji($one,$two,$func)

{

//规定:检查$func是否是函数,如果不是函数停止执行本段代码,返回false

if(!is_callable($func))

{

return false;

}

//把$one、$two相加,再把$one和$two传入$func这个函数中处理一次

//$func是一个变量函数,参见变量函数

echo $one + $two + $func($one,$two);  //结果为: 150

}

woziji(20,30,function($foo,$bar)

{

$result = ($foo+$bar)*2;

return $result;

}

);

?>

内部函数:

内部函数,是指在函数内部又声明了一个函数。

注意事项:

内部函数名,不能是已存在的函数名

假设在函数a里面定义了一个内部函数,不能定用两次函数a。

我们下面来看代码,你将很快的学习会:<?php

function foo()

{

echo '我是函数foo哟,调一下我才会执行定义函数bar的过程
';

function bar()

{

echo '在foo函数内部有个函数叫bar函数
';

}

}

//现在还不能调用bar()函数,因为它还不存在

bar();

foo();

//现在可以调用bar()函数了,因为foo()函数的执行使得bar()函数变为已定义的函数

bar();

//再调一次foo()看看是不是会报错?

foo();

?>

你会发现,在上面foo() 函数内部又定义了一个bar函数,这就是内函数数。

仔细观察和实验后会得出如下的结论:

1. foo()调用两次会报错

2. 如果不调foo()函数无法执行bar函数,因为bar是在foo的内部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值