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)();
}
點選 連結,免費加入心智極客的知識星球分享群,共同成長。