2016-11-28 90 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)' –

相關問題