2017-06-12 126 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

相关问题