douping1581 2017-06-12 09:32
浏览 952

错误“Closure对象不能具有属性”

This function is throwing me a "Closure object cannot have properties" error :

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,
        ]);
    }

Actually I'am not sure if PHP can support this kind of callback functions. Could anyone tell me how to correct this or make it work in another way?

EDITED: Here are the classes Classroom and Activity:

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);
    }
}
  • 写回答

1条回答 默认 最新

  • douwanc63652 2017-06-12 09:56
    关注

    You need to use call_user_func(). Create a function you want to use as a callback:

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

    then you need to use call_user_func() in the constructor:

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

    in the end edit the code you posted here:

    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,
        ]);
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图