为了账号安全,请及时绑定邮箱和手机立即绑定

通过引用 Laravel 事件侦听器传递数组

通过引用 Laravel 事件侦听器传递数组

PHP
慕无忌1623718 2021-07-09 16:01:08
我在 Laravel 应用程序中有一个数组,我想在 Laravel 侦听器中修改它。PHP 默认按值传递一个数组,但是,Laravel 事件及其侦听器的工作方式我无法修改原始变量。有没有比我在下面做的更好的方法?从中触发事件的模型。型号:Event.phpnamespace Vendor\Package\Modelsuse Vendor\Package\Events\PageNodeArrayAfter;use Event;class Page{   public function toArray()   {      $data = [];       // do something with the data.       Event::fire(new PageNodeToArrayAfter($data))      // The data should be modified by a listener when I use it here.   }}事件:PageNodeToArrayAfter.phpnamespace Vendor\Package\Events;class PageNodeToArrayAfter{    /**     * Props to be sent to the view     * @var array $data     */    protected $data = [];    /**     * @param array $data     *      */    public function __construct(array &$data)    {        $this->data = $data;    }    public function getData()    {        return $this->data;    }}监听器:FlashMessagesListner.phpnamespace Vendor\Package\Listeners;class FlashMessagesListner{    protected $data = [];    public function handle(PageNodeToArrayAfter $event)    {       $this->data = $event->getData();       // The problem here is the $data is no logner a reference here.     }}
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

根据数组的文档,它是这样说的:


数组赋值总是涉及值复制。使用引用运算符按引用复制数组。


因此,将您的构造函数更改为此:


// prepend the argument with the reference operator &

public function __construct(array &$data) 


查看完整回答
反对 回复 2021-07-16
  • 3 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信