【问题标题】:Error "Closure object cannot have properties"错误“闭包对象不能有属性”
【发布时间】:2017-11-13 17:28:55
【问题描述】:

这个函数给我一个“闭包对象不能有属性”的错误:

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

【问题讨论】:

  • 什么是Classroom?它可能是您项目中的自定义类,并且不知道其构造函数的参数是什么(以及闭包做了什么),我们可能无法帮助您。
  • 我添加了课程

标签: php symfony twig closures


【解决方案1】:

您需要使用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,
    ]);
}

【讨论】:

  • 谢谢。但是我现在有这个错误:警告:call_user_func() 期望参数 1 是有效的回调,找不到函数 'myCallback' 或无效的函数名。我尝试清除缓存,但没有任何改变
  • 也许你打错了函数名?如果你要传递一个方法,你需要在一个数组中传递它: call_user_func(array($obj, 'method_name'); //对于一个对象方法 --- call_user_func(array( 'className', 'method_name'); //用于静态方法
猜你喜欢
  • 2018-05-21
  • 2021-08-25
  • 2014-05-14
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
相关资源
最近更新 更多