Здравствуйте.
Не знаю проблема это или особенность, но такое поведение кажется мне нелогичным.
Возьмем класс CActiveRecord, он реализует ArrayAccess, и насколько я понимаю (да и по исходнику это видно) что возврат $Record->property и $Record['property'] идентичен. В таком случае странно что isset($Record->property) и isset($Record['property']) дают разные результаты.
Связано это с тем что для isset($Record->property) будет вызвано CActiveRecord::__isset(), а для isset($Record['property']) вызывается уже CActiveRecord::offsetExists(), но их реализация различна. Чем обусловлен такой подход?
isset и CActiveRecord
- Svyatov
- Сообщения: 459
- Зарегистрирован: 2010.08.12, 14:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: isset и CActiveRecord
Кстати, интересный вопрос.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: isset и CActiveRecord
Тест-кейс с отличиями не помешал бы…
Нравится Yii? Давайте сделаем его лучше!.
Re: isset и CActiveRecord
Не писал я кейс-тестов, наверное это повод начать.
Смысл простой: isset($Record['property']) возвращает false для всех пропертей которые не являются явно определенными в классе, а реализованы через магические методы. isset($Record->property) возвращает корректно, как для магических так и для реальных свойств.
Смысл простой: isset($Record['property']) возвращает false для всех пропертей которые не являются явно определенными в классе, а реализованы через магические методы. isset($Record->property) возвращает корректно, как для магических так и для реальных свойств.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: isset и CActiveRecord
Нравится Yii? Давайте сделаем его лучше!.