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

dtcbnfnu  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(99)

下面是我的代码:

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

}

字符串

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


我得到这个输出:
第一个月
但是它触发了事件,因为它给出了一个包含以下文本的日志:add_value_to_array
我想要更新的数组包含'new'项。我的预期结果:
Array ( [0] => foo [1] => bar [2] => new )
有可能吗?先谢了。

sycxhyv7

sycxhyv71#

Passing by reference vs. passing by value
当你传递一个参数给一个函数,然后在函数中修改这个参数时,PHP解释器通过复制而不是引用来传递这个参数。这意味着你在函数中对参数的修改不会影响函数外的原始值。
这就是为什么你看不到$array的值在Event回调之外更新的原因。你期望看到的数组是由Event回调返回的,但你没有捕获它。
如果需要就地修改$array,可以告诉PHP通过引用传递,在传递参数时给参数加上一个“&”号(&$array)。

相关问题