我需要快速模拟一个对象,以便在模板中出现时:
$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()
?
可以用肮脏/黑客的方式进行,因为它只是用于嘲弄目的。
答案 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();