gpt4 book ai didi

php - 如何使用类方法作为回调

转载 作者:IT老高 更新时间:2023-10-28 11:55:54 26 4
gpt4 key购买 nike

我有一个类,其中包含我想用作回调的方法。
如何将它们作为参数传递?

Class MyClass {

public function myMethod() {
// How should these be called?
$this->processSomething(this->myCallback);
$this->processSomething(self::myStaticCallback);
}

private function processSomething(callable $callback) {
// Process something...
$callback();
}

private function myCallback() {
// Do something...
}

private static function myStaticCallback() {
// Do something...
}

}

最佳答案

查看callable manual查看将函数作为回调传递的所有不同方式。我在此处复制了该手册,并根据您的情况添加了每种方法的一些示例。

Callable


  • A PHP function is passed by its name as a string. Any built-in or user-defined function can be used, except language constructs such as: array(), echo, empty(), eval(), exit(), isset(), list(), print or unset().
  // Not applicable in your scenario
$this->processSomething('some_global_php_function');

  • A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.
  // Only from inside the same class
$this->processSomething([$this, 'myCallback']);
$this->processSomething([$this, 'myStaticCallback']);
// From either inside or outside the same class
$myObject->processSomething([new MyClass(), 'myCallback']);
$myObject->processSomething([new MyClass(), 'myStaticCallback']);

  • Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object at index 0.
  // Only from inside the same class
$this->processSomething([__CLASS__, 'myStaticCallback']);
// From either inside or outside the same class
$myObject->processSomething(['\Namespace\MyClass', 'myStaticCallback']);
$myObject->processSomething(['\Namespace\MyClass::myStaticCallback']); // PHP 5.2.3+
$myObject->processSomething([MyClass::class, 'myStaticCallback']); // PHP 5.5.0+

  • Apart from common user-defined function, anonymous functions can also be passed to a callback parameter.
  // Not applicable in your scenario unless you modify the structure
$this->processSomething(function() {
// process something directly here...
});

关于php - 如何使用类方法作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com