如何通过 CodeIgniter 4 中的事件更新值

问题描述 投票:0回答:2

这是我的代码:

pp\Controllers\My_controller.php

namespace App\Controllers;

use CodeIgniter\Events\Events;

class My_controller extends App_Controller {

    function __construct() {
        parent::__construct();
        require_once(APPPATH . "update_value.php");
    }

    function index() {
        $array = array("foo", "bar");
        Events::trigger('add_value_to_array', $array);

        print_r($array);
    }

}

pp\update_value.php

use CodeIgniter\Events\Events;

Events::on('add_value_to_array', function($array) {
    error_log("add_value_to_array" . PHP_EOL, 3, "events.txt");
    array_push($array, "new");
    return $array;
});

我得到这个输出:

Array ( [0] => foo [1] => bar )

但是它触发了事件,因为它给出了包含以下文本的日志:

add_value_to_array

我想要包含“新”项目的更新数组。我的预期结果:

Array ( [0] => foo [1] => bar [2] => new  )

可能吗?预先感谢。

php codeigniter codeigniter-4
2个回答
0
投票

按引用传递与按值传递

当您将参数传递给函数并随后在函数内更改该参数时,PHP 解释器通过复制而不是引用传递该参数。这意味着您对函数内部参数所做的更改不会影响函数外部的原始值。

这就是为什么您看不到

$array
的值在事件回调之外更新的原因。您期望看到的数组是由该事件回调返回的,但您没有捕获它。

如果您需要就地修改

$array
,则可以通过在传递参数时在参数前添加一个与号 (
&$array
) 来告诉 PHP 通过引用传递。


-2
投票

你是如何解决这个问题的?使用&符号(&$array)通过引用传递似乎不起作用

© www.soinside.com 2019 - 2024. All rights reserved.