下面是我的代码:
\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 )
个
有可能吗?先谢了。
1条答案
按热度按时间sycxhyv71#
Passing by reference vs. passing by value
当你传递一个参数给一个函数,然后在函数中修改这个参数时,PHP解释器通过复制而不是引用来传递这个参数。这意味着你在函数中对参数的修改不会影响函数外的原始值。
这就是为什么你看不到
$array
的值在Event回调之外更新的原因。你期望看到的数组是由Event回调返回的,但你没有捕获它。如果需要就地修改
$array
,可以告诉PHP通过引用传递,在传递参数时给参数加上一个“&”号(&$array
)。