栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在PHP中实现回调?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在PHP中实现回调?

该手册可互换地使用术语“回调”和“可调用”,但是,“回调”传统上是指充当函数指针的字符串或数组值,并引用函数或类方法以供将来调用。自PHP
4以来,已经允许使用函数式编程的某些元素。

$cb1 = 'someGlobalFunction';$cb2 = ['ClassName', 'someStaticMethod'];$cb3 = [$object, 'somePublicMethod'];// this syntax is callable since PHP 5.2.3 but a string containing it// cannot be called directly$cb2 = 'ClassName::someStaticMethod';$cb2(); // fatal error// legacy syntax for PHP 4$cb3 = array(&$object, 'somePublicMethod');

通常,这是使用可调用值的安全方法:

if (is_callable($cb2)) {    // Autoloading will be invoked to load the class "ClassName" if it's not    // yet defined, and PHP will check that the class has a method    // "someStaticMethod". Note that is_callable() will NOT verify that the    // method can safely be executed in static context.    $returnValue = call_user_func($cb2, $arg1, $arg2);}

现代PHP版本允许上面的前三种格式直接作为调用

$cb()
call_user_func
call_user_func_array
支持以上所有内容。

注释/注意事项:

  1. 如果函数/类已命名空间,则字符串必须包含标准名称。例如
    ['VendorPackageFoo', 'method']
  2. call_user_func
    不支持通过引用传递非对象,所以您可以使用
    call_user_func_array
    ,或者在以后的PHP版本,保存回调到var和使用直接的语法:
    $cb()
    ;
  3. 具有
    __invoke()
    方法的对象(包括匿名函数)属于“可调用”类别,并且可以按相同方式使用,但是我个人不将其与传统“回调”术语相关联。
  4. 旧版
    create_function()
    创建全局函数并返回其名称。它是包装器,
    eval()
    应改用匿名函数。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号