Здравствуйте.
Начал разбираться с yii. На странице с документацией http://yiiframework.ru/doc/guide/ru/basics.component прочел такое:"Событию могут быть назначены несколько обработчиков. При возникновении события обработчики будут вызваны в порядке их назначения." Объясните пожалуйста какой механизм такого присвоения. То есть как получается, что если обычной переменной присваивается значение, то это значение заменяет предыдущее. Но в случае с событиями значения добавляются в массив? Я понимаю, что скорее всего мне не хватает знаний по php, но что то информации по этому вопросу не смог найти.
несколько обработчиков события компонента
-
- Сообщения: 6
- Зарегистрирован: 2013.11.17, 12:22
Re: несколько обработчиков события компонента
Да, события это фактически массив.
При возникновении события обработчики вызываются по очереди.
При возникновении события обработчики вызываются по очереди.
Re: несколько обработчиков события компонента
Из мануала ничего не понял. В сырце все написано по-человечески:
Вот так добавляются обработчики.
Это в Clist. Который extends CComponent в который Clist и добавляется. Так строится дерево.
Вот так добавляются обработчики.
Действующее вещество:* Inserts an item at the specified position.
* Original item at the position and the next items
* will be moved one step towards the end.
Код: Выделить всё
array_splice($this->_d,$index,0,array($item));
Re: несколько обработчиков события компонента
Это если обычной переменной. В самом классе такой переменной нет. Срабатывает магический метод __set.cyberovskij писал(а):...если обычной переменной присваивается значение, то это значение заменяет предыдущее.
Попробуйте создать класс:
Код: Выделить всё
class Man {
public function __set($name, $value) {
echo 'Я метод __set, вызванный с $name=' . $name . ' и $value=' . $value;
}
}
Код: Выделить всё
$man = new Man();
$man->age = 18;
Код: Выделить всё
Я метод __set, вызванный с $name=age и $value=18
Доработаем класс:
Код: Выделить всё
class Man
{
public $values = array();
public function __set($name, $value) {
$this->values[$name][] = $value
}
public function __get($name) {
return $this->values[$name];
}
}
Код: Выделить всё
$man = new Man();
$man->woman = 'Маша';
$man->woman = 'Катя';
$man->woman = 'Кристина';
Код: Выделить всё
print_r($man->woman);
То же самое происходит и в аналогичном методе компонентов в Yii для всех таких якобы переменных, начинающихся с on*. Только вместо обычного массива создаётся более продвинутый список CList.
Ну и в копилку по событиям рекомендую ещё одну статью.
Re: несколько обработчиков события компонента
Да, и обязательно следует добавить что под событиями подразумевается возникновение условий, а вовсе не прерывания по событию, типа, как в примере onClick().
Или на php уже пишут MDI апликухи?
Или на php уже пишут MDI апликухи?
-
- Сообщения: 6
- Зарегистрирован: 2013.11.17, 12:22
Re: несколько обработчиков события компонента
Спасибо всем, кто отписался особенно ElisDN за объяснение на пальцах.