【问题标题】:Laravel passing array by reference to an event subscriberLaravel 通过引用事件订阅者传递数组
【发布时间】:2014-09-12 21:06:03
【问题描述】:

是否可以通过引用将数组传递给事件订阅者?

我有一个事件“user.create.show”,我想将一个数组传递给该事件,以便在需要时对其进行修改。

调用看起来像这样。

Event::fire('user.create.show', array($data));

事件订阅者如下所示。

public function createShow(&$data) 
{
    $data['foo'] = 'bar';
    return $data;
}

我得到一个“UserSubscriber::createShow() 的参数 1 应该是一个参考,给定的值”PHP 错误。

导致错误的行如下:

return call_user_func_array($callable, $data);

我知道我可以将值返回给它,但是 Laravel 会返回一个包含变量的数组和一个多维数组(如果将多个变量传递给事件)。我可以解析返回值,但如果我可以通过引用传递,它会使我的代码更清晰、更容易。

【问题讨论】:

    标签: php arrays events laravel pass-by-reference


    【解决方案1】:

    好吧,使用Event::fire('user.create.show', array($data));,您显然是在传递一个值,因为您在调用中使用了数组构造函数。将其更改为以下内容:

    $data = array($data);
    Event::fire('user.create.show', $data);
    

    还要注意notes heresolution of passing array by reference here

    【讨论】:

    • 你如何在监听器中访问它?
    【解决方案2】:

    这就是我通过引用传递的方式:

        \Event::listen('foo', function(&$ref){
            $ref = 'bar';
        });
    
        $foo = 'foo';
    
        $args[] = &$foo;
    
        \Event::fire('foo', $args);
    
        echo $foo; // bar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 2018-07-24
      相关资源
      最近更新 更多