PHP 技术卡片 - 在实例中调用 Invoke 类型的类

PHP 的 __invoke 是一个很有用的特性,可以保持类的单一职责

示例

class Invokable
{
    public function __invoke()
    {
        echo '已被 invoke';
    }
}

使用

$invokable = new Invokable();
$invokable();

Invokeable 类可以被注入到其他类中

class Foo
{
    protected $invokable;

    public function __construct(Invokable $invokable)
    {
       $this->invokable = $invokable;
    }

    public function callInvokable()
    {
        $this->invokable();
    }
}

使用 $this->invokable(); 来激活 Invokable 类,类会去寻找名为 invokable 的方法,因此下面操作将会报错

$foo = new Foo($invokable);
$foo->callInvokable();
// Call to undefined method Foo::invokable() 

以下是正确的调用方法

public function callInvokable()
{
    // 优先推荐
    call_user_func($this->invokable);

    // 可选
    $this->invokable->__invoke();

    // 可选
    ($this->invokable)();
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!