php回调函数主要用在什么场景?

发布于 2022-09-07 23:16:40 字数 1234 浏览 27 评论 0

最近在研究回调函数,据说是变身高级程序员必备技能之一,网上搜了大半天,到现在一直也没搞清楚回调使用的真正场景,遂在公司的laravel项目中以call_user_func为关键字搜了下,N多回调,没看懂,以下面代码为例:

/**
 * Asserts that a haystack that is stored in a static attribute of a class
 * or an attribute of an object contains a needle.
 *
 * @param mixed  $needle
 * @param string $haystackAttributeName
 * @param mixed  $haystackClassOrObject
 * @param string $message
 * @param bool   $ignoreCase
 * @param bool   $checkForObjectIdentity
 * @param bool   $checkForNonObjectIdentity
 */
function assertAttributeContains($needle, $haystackAttributeName, $haystackClassOrObject, $message = '', $ignoreCase = false, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
{
    return call_user_func_array(
        'PHPUnit_Framework_Assert::assertAttributeContains',
        func_get_args()
    );
}

这段代码使用了回调,但是搞不清楚不能正常的写吗?如下:

function assertAttributeContains($needle, $haystackAttributeName, $haystackClassOrObject, $message = '', $ignoreCase = false, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
{
    return PHPUnit_Framework_Assert::assertAttributeContains(func_get_args());
}

为何不用这种直接调用而非得用回调呢?感觉有点装逼。

请大神指点,多谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

孤檠 2022-09-14 23:16:40

最近在一个项目中用到多进程,每个进程需要分配一个方法丢给进程执行,这时候就需要将闭包函数作为一个参数传进去,然后在子进程调用!!,由此可知,所有需要把函数或方法作为一个参数让另外一个对象去执行的情况下需要用到闭包函数!

靖瑶 2022-09-14 23:16:40

这个问题有点难回答

首先大部分直接调用都是可以直接调用,而不用call_user_func 和 call_user_func_array

这2个函数, 调用的函数可以是匿名,类对象方法,类的静态方法

Closure匿名类,会在后续很有很多利用的地方
use可引起上下文变量,这是php缺失部分

更多地方,你可以参考php官方

惟欲睡 2022-09-14 23:16:40

这里的用法我觉得只是为了简化参数传递的过程,另外,你改写的方法有问题。应该是

return PHPUnit_Framework_Assert::assertAttributeContains(...func_get_args());

在没有...操作符的PHP版本里面,如果不用call_user_func_array,那么你就只能手动传递每一个参数。

北凤男飞 2022-09-14 23:16:40

楼主这代码, 只能说写代码的人没用到极致.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文