如何从内联对象调用匿名函数(Closure)?

时间:2016-11-28 16:03:58

标签: php

我需要快速模拟一个对象,以便在模板中出现时:

$that->user->isAdmin()

它将返回true

我尝试将带有匿名函数的数组转换为object:

$that = (object) ( (array(
    'user'      =>
        (object) (array(
            'isAdmin' => function() {
                return true;
            }
(...)

但是var_dump($that->user)返回一个空的(?)Closure:

object(stdClass)#3 (1) {
  ["isAdmin"]=>
  object(Closure)#2 (1) {
    ["this"]=>
    object(View)#1 (0) {
    }
  }
}

$that->user->isAdmin()直接调用它会返回Call to undefined method stdClass::isAdmin()

如何重写$that以便能够致电$that->user->isAdmin()

可以用肮脏/黑客的方式进行,因为它只是用于嘲弄目的。

1 个答案:

答案 0 :(得分:1)

$that->user->isAdmin$that->user对象的合适,也是一个封闭。如果您尝试使用$that->user->isAdmin()进行调用,则会尝试调用方法 isAdmin

从php7你可以用

来调用它
$bool = ($that->user->isAdmin)();

其他,您可以将$that->user->isAdmin放入变量并调用它,或者使用call_user_func代替。

修改

如果您需要方法 isAdmin

$that = (object) ( (array(
    'user' => new class {
        public function isAdmin() {
            return true;
        }
    })
));

$bool = $that->user->isAdmin();