【问题标题】:PHP: is it possible to callback like in C++?PHP:是否可以像在 C++ 中一样进行回调?
【发布时间】:2021-12-01 19:44:22
【问题描述】:

我不确定这在 PHP 中是否可行……

我基本上想要

// A.php

class A {
    public static function foo(int a, string b) {
        //…//
    }
}

被赋予另一个类中的另一个函数。 但是其他类不应该知道类 A 并且不应该需要包含它,而是只指定这样的东西......

// B.php

class B {
    public static function doSomething(callable $fn) {
        $fn(1,'test'); //<-error
    }
}

目前我在调用它时收到错误“A 类”未找到...

include_once('A.php');
include_once('B.php');
B::doSomething('A::foo');

【问题讨论】:

  • Tested your code 它似乎有效?
  • @KIKOSoftware 那是因为你把它放在一个文件中,那里——当然——B知道A,反之亦然。
  • 好的,那你做了什么没用?
  • 尝试使用call_user_func 在doSomething() 方法中执行可调用。像这样:call_user_func($fn, 1, 'test');。这将适用于任何可调用对象,而不仅仅是您发布的字符串。
  • 我努力在我自己的服务器上运行测试中的代码,在三个单独的文件中,如您所述,它仍然可以正常工作。我认为您的问题出在其他地方。

标签: php callback


【解决方案1】:

PHP 可以做回调,但我不确定你是否可以通过类名来做。

这是一个非常简单的例子:

function Test($mystring) {return "MY STRING = ".$myString;}
function CallMyFunction($functionname,$mydata) 
{
  echo $functionname($mydata);
}

CallMyFunction('Test',"Hello World!");

更多信息在这里: https://www.w3schools.com/php/php_callback_functions.asp

【讨论】:

    【解决方案2】:

    线索是它似乎在被调用类的上下文中做字符串到函数解析,所以调用

    B::doSomething([A::class, 'foo']);
    

    在已知 A 的上下文中执行此操作。至少这是我的理解:D

    【讨论】:

    • 他们说:“上下文就是一切”。 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多