Код:.Не удается передать параметр 2 по ссылке
final class SimpleEventManager {
private $listeners = array();
public function listen($event, $callable) {
$this->listeners[$event][] = $callable;
}
public function fire($event, array $arguments = array()) {
foreach ($this->listeners[$event] as $listener) {
call_user_func_array($listener, $arguments);
}
}
}
$manager = new SimpleEventManager;
$manager->listen('sql', function($sql) {
$sql .= " order by username desc";
});
$sql = "select * from users";
$manager->fire('sql', array($sql));
var_dump($sql); // is: select * from users
// want: select * from users order by username desc
Поэтому в основном я хочу, чтобы мои слушатели событий, чтобы иметь возможность изменить аргументы, которые приходят в Я пытался делать такие вещи, как array &$arguments = array()
, но тогда я получив ошибку Cannot pass parameter 2 by reference
.
Кто-нибудь знает, как я могу это решить?
Измените функцию * * принять аргумент по ссылке. 'public function fire ($ event, & $ arguments)' –
Не ответ, но почему вы вызываете foreach? '$ this-> listeners [$ event]' не является массивом. – OneOfOne
@cale_b Я не уверен, что вы имеете в виду, не могли бы вы привести пример с большим кодом? Я попытался использовать 'fire ($ event, & $ arguments)', но затем я получаю ту же ошибку в '$ manager-> fire ('sql', array ($ sql))' – user2538584