PHP匿名函数以及call_user_func的思考
配图依然与主题无关,仅仅是我个人喜欢而已,今天要说的是关于 call_user_func
的一些理解。
以前对于闭包和匿名函数的理解不是太好。所以,今天在 phphub
提问的时候犯了一个比较二的错误,趁着晚上回家赶紧总结一下,增强自己的记忆。
话说以前对于闭包或者匿名函数都是自己写自己调用,所以没有出现过什么问题,但是前几天在弄 laravel
分页的时候,发现里面有一个 $presenter
自己知道这个可能会让我的代码更简洁,但是我却不知道如何调用,在 phphub
提问的时候有人告诉了我怎么使用,但是我却对参数列表比较迷惑,是如何获取参数列表的。今天终于有人告诉了我,我才发现对于 php
的一些函数理解的并不是很到位。于是乎赶紧翻阅 php
文档,把 call_user_func
再次理解一下。参见: http://php.net/manual/zh/function.call-user-func.php 。
文档说的比较明白,第一个参数是方法名称,余下的参数就是调用方法的参数列表了。
|
|
所以,这个 render
方法里面就比较容易理解了,当我们传入的 $presenter
为空的时候,并且 static::$presenterResolver
($static是延迟绑定,这个也可以在文档里面找到)已经赋值的时候,就会执行 if
代码段里面的内容了。在我的代码中主要应用的是 LengthAwarePaginator
类里面的相关方法(其实还有一个 Paginator
类,这个类是用在那个 simple
的简单分页中的),在这里面我并没有找到为 $presenter
赋值的方法,所以我们去他们的父类 AbstractPaginator
中寻找,果然里面有为 $presenter
赋值的方法。
|
|
可以看到这里面接受的参数是一个闭包或者说匿名函数(这两个东西我还得理解一下)。
至此,一些就很通顺了。我们传入的匿名函数的参数是 AbstractPaginator
的具体实现类,里面实现了分页相关渲染的方法。
所以,我们最终在provider里面待用相关的设置方法
|
|
这样我们在模板里面直接调用 render
即可,也不用时刻记得传入参数了。
- 原文作者:M1racle
- 原文链接:https://www.cimple.ink/2016/09/04/thinking-about-php-anonymous-function-and-calluserfunc/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。