这是我的代码:
\app\Controllers\My_controller.php
namespace AppControllers;
use CodeIgniterEventsEvents;
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 CodeIgniterEventsEvents;
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
我想要包含"new"项的更新数组。我的预期结果:
Array ( [0] => foo [1] => bar [2] => new )
有可能吗?提前谢谢。
通过引用与通过值
当您将参数传递给函数,然后在函数中对该参数进行更改时,PHP解释器会通过复制而不是引用来传递该参数。这意味着对函数内部参数所做的更改不会对函数外部的原始值产生影响。
因此,为什么您看不到在Event回调之外更新的$array
的值。您期望看到的数组由Event回调返回,但您没有捕获它。
如果您需要在适当的位置修改$array
,您可以告诉PHP通过在传递参数时在参数前面加一个"与"号(&$array
(来进行引用传递。