2016-11-28 85 views
0

我需要快速嘲笑的对象,这样当模板显示:如何从内嵌对象调用匿名函数(Closure)?

$that->user->isAdmin() 

它将返回true

我试图用匿名函数施放一个数组对象:

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

var_dump($that->user)返回一个空闭幕(?):

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

$that->user->isAdmin$that->user对象的适当性,这也是一个闭包。如果您尝试使用$that->user->isAdmin()调用它,则您试图调用方法代替isAdmin

从PHP7你可以用

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

称之为Otherwhise你可以把$that->user->isAdmin在一个变量并调用它,或者使用call_user_func代替。

编辑

如果你想有一个方法isAdmin

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

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

棘手的部分是,它必须由'$但─>用户> isAdmin正是被称为()' ,因为这是一个模拟。我只能改变'$ that'对象。 –

+0

那么你不需要关闭,你需要一个名称为 – Federkun

+0

的方法关于你的编辑 - 这个构造是否也是PHP7呢?因为我得到'意外'类'(T_CLASS)' –

相关问题