如何在类范围之外的可调用上下文中访问 $this?

问题描述 投票:0回答:2
class foo {
    function bar(callable $callable) {
        $callable();
    }

    function printStr() {
        echo "hi";
    }
}

$foo = new foo();
$foo->bar(function () {
    $this->printStr(); // Using $this when not in object context
});

是的,您需要传递一个匿名函数来调用 foo 类的方法。正如在 JS 中一样。如何才能实现这一目标?

php callable
2个回答
1
投票

这个怎么样:

class foo {
    function bar(callable $callable) {
        $callable($this);
    }

    function printStr() {
        echo "hi";
    }
}

$foo = new foo();
$foo->bar(function ($that) {
    $that->printStr(); // Using $this when not in object context
});

演示:https://3v4l.org/VbnNH

这里

$this
作为可调用函数的参数提供。


0
投票

根本不需要调整你的类,你可以简单地将类和方法名称作为数组传递来表示可调用的。该技术不提供将参数传递到回调中的能力。

代码:(演示

$foo = new foo();
$foo->bar([$foo, 'printStr']);

或者您可以在匿名函数中使用箭头函数语法来调用类方法。当需要将参数传递到回调中时,这很有用。

代码:(演示

$foo = new foo();
$foo->bar(fn() => $foo->printStr());

如果可调用对象不需要 100% 地访问类方法(或对象或常量),那么这两种方法都是合适的。如果您的

bar()
方法的可调用始终需要访问实例化对象,那么 @KIKOSoftware 修改类的建议是最合适的。

© www.soinside.com 2019 - 2024. All rights reserved.