2017-06-12 128 views
1

此功能扔我「封閉對象不能有屬性」錯誤:錯誤「封閉對象不能有屬性」

public function activitiesSummaryAction() 
    { 
     $classes = array(); 

     for($i = 1; $i <=10; $i++) 
     { 
      array_push($classes, new Classroom($i, function(){ 

       $activites = array(); 

       for ($i = 1; $i <=10; $i++) 
       { 
        array_push($activites, new Activity(rand(1,7), rand(2016,2018))); 
       } 

       return $activites; 
       } 
      )); 
     } 


     return $this->render('teacher/activitiesSummary.html.twig', [ 
      'classes' => $classes, 
     ]); 
    } 

其實我'不知道如果PHP可以支持這樣的回調函數。任何人都可以告訴我如何糾正這個問題或以其他方式工作嗎?

編輯:這裏是類教室和活動:您需要使用

class Activity { 

    public $_id; 
    public $_annee; 
    public $_inProgress; 

    function __construct($id, $annee) { 
     $this->_id = $id; 
     $this->_annee = $annee; 
     $this->_inProgress = rand(0,1); 
    } 
} 


class Classroom { 
    public $_id; 
    public $_activities; 

    function __construct($id, $activities) { 
     $this->_id = $id; 
     $this->_activities = array($activities); 
    } 
} 
+0

什麼是'課堂'?這可能是你的項目中的一個自定義類,並且不知道它的構造函數的參數是什麼(以及閉包的做法),我們可能無法幫助你。 –

+0

我添加了類 – Mit

回答

0

call_user_func()。 創建要作爲回調使用功能:

function myCallback(){ 
    $activites = array(); 
    for ($i = 1; $i <=10; $i++) 
    { 
     array_push($activites, new Activity(rand(1,7), rand(2016,2018))); 
    } 
    return $activites; 
} 

,那麼你需要在構造函數中使用call_user_func():

class Classroom { 
    public $_id; 
    public $_activities; 

    function __construct($id, $activities) { 
     $this->_id = $id; 
     $this->_activities = array(call_user_func($activities)); 
    } 
} 

在編輯完你的代碼張貼在這裏:

public function activitiesSummaryAction() 
{ 
    $classes = array(); 

    for($i = 1; $i <=10; $i++) 
    { 
     array_push($classes, new Classroom($i, 'myCallback')); 
    } 


    return $this->render('teacher/activitiesSummary.html.twig', [ 
     'classes' => $classes, 
    ]); 
} 
+1

謝謝。但現在我有這個錯誤:**警告:call_user_func()期望參數1是一個有效的回調函數'myCallback'未找到或無效的函數名稱**。我試過清除緩存但它沒有改變任何東西 – Mit

+0

也許你錯誤地鍵入了函數名?如果你傳遞一個方法,你需要將它傳遞給一個數組: ** call_user_func(array($ obj,'method_name'); ** //對象方法--- ** call_user_func(array( 'className','method_name'); ** //用於靜態方法 – Anarcociclista

相關問題