当前位置: 首页 > 面试题库 >

如何在PHP中实现回调?

印飞捷
2023-03-14
问题内容

回调如何用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_funccall_user_func_array支持以上所有内容。

注释/注意事项:

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


 类似资料:
  • 问题内容: 场景是,我要重定向用户或根据成功显示警报,在分派操作后显示错误回调。 下面是使用 redux-thunk 完成任务的代码 因为redux-thunk中的调度动作返回了Promise,所以响应起来很容易。 但是现在,我开始沉迷于redux- saga,试图弄清楚如何获得与上述代码相同的结果。由于Saga在不同的线程上运行,因此无法从上面的查询中获取回调。所以我只想知道你们是如何做到的。还

  • 本文向大家介绍ASP.NET中如何实现回调,包括了ASP.NET中如何实现回调的使用技巧和注意事项,需要的朋友参考一下 一、引言 在ASp.NET网页的默认模型中,用户通过单击按钮或其他操作的方式来提交页面,此时客户端将当前页面表单中的所有数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器将重新实例化一个当前页面类的实例来响应这个请求,然后将整个页面的内容重新发送到客户端。这种处理方式对运行

  • 问题内容: 我正在尝试使用Flask和Flask-Login扩展在Flask应用中实现用户身份验证。目的是从数据库中提取用户帐户信息,然后登录用户,但我陷入了困境。但是,我将其范围缩小到Flask-Login行为的特定部分。 根据Flask-Login文档,我需要创建一个user_loader“回调”函数。此功能的实际目的和实现让我困惑了几天: 你将需要提供一个user_loader回调。此回调用

  • 这项规定就好像注册官或副注册官等获授权人士须以数码方式签署一份证明书。实现数字签名背后的基本思想是要知道: 1)证书是否由授权人数字签名,以及该授权人是谁,或者是谁创建了该证书,而该证书是由其他没有该授权的人创建的。 2)注册官/分注册官在证书上作数码签署(以停止伪造)后,证书是否有任何更改。 我已经搜索了很多关于这个话题,没有得到任何东西,甚至没有任何教程,可以指导我如何做到这一点。我从来没有听

  • 问题内容: 我只需要一点在PHP中使用cURL和JSON的帮助,因为我从未真正做到这一点。我要完成的工作是点燃付款的回响,并限制最近一笔捐款可以先付多少。 网址:http : //api.buycraft.net/query?secret=83d043249170343dd048d4da62387f6cb39ed97f&action=payments 问题答案: 如果要使用JSON编码或解码数组,

  • 问题内容: 我想有条件地输出HTML以生成页面,那么在PHP 4+中回显HTML的多行代码段的最简单方法是什么?我需要使用Smarty这样的模板框架吗? 问题答案: 有几种方法可以在PHP中回显HTML。 1.在PHP标记之间 2.回声中 对于回声,如果您希望在HTML中使用双引号,则必须使用单引号回声,如下所示: 或者,您可以像这样逃避它们: 3. Heredocs 4. Nowdocs(从PH