这是我的代码:
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 解释器通过复制而不是引用传递该参数。这意味着您对函数内部参数所做的更改不会影响函数外部的原始值。
这就是为什么您看不到
$array
的值在事件回调之外更新的原因。您期望看到的数组是由该事件回调返回的,但您没有捕获它。
如果您需要就地修改
$array
,则可以通过在传递参数时在参数前添加一个与号 (&$array
) 来告诉 PHP 通过引用传递。
你是如何解决这个问题的?使用&符号(&$array)通过引用传递似乎不起作用