PHP: isset () возвращает false для динамических свойств объекта - PullRequest
4 голосов
/ 23 октября 2011

У меня есть иерархия классов, которые инициализируются из базы данных.Я использую __get () и __set () с массивом в общем базовом классе Item для поддержки различного количества свойств.Один класс, полученный из Item, UserProfile, используется для хранения пользовательских данных.В моей базе данных есть таблица телефонных номеров с отношением один-ко-многим к пользовательской таблице для хранения нескольких телефонных номеров для одного пользователя.Если есть мобильный телефон, то у объекта UserProfile есть мобильное поле.То же самое для дома и бизнеса.Если число не существует, свойства не существует.

Проблема возникает, когда я хочу проверить наличие этих свойств.когда я использую код вроде

if (isset($clientData->home_phone))
{
$this->startElement('phone');
$this->writeAttribute('phone_number_type','home');
$this->writeRaw($clientData->home_phone);
$this->endElement();
}

Функция всегда возвращает false.Я пытался использовать скобки, чтобы сказать php, чтобы сначала получить переменную, но я только что получил ошибки.Нужна ли мне специальная функция attributeExists () для имитации функциональности isset (), или есть более простой подход?

Как я могу проверить наличие динамического свойства без какой-либо ошибки?

Ответы [ 2 ]

6 голосов
/ 23 октября 2011

Существует магический метод , называемый __isset(), который работает аналогично __get() и __set(). Это позволит вам вызывать isset для ваших динамических свойств

3 голосов
/ 23 октября 2011

__ isset () запускается вызовом isset () или empty () для недоступных свойств.

Вы можете определить магический метод __isset(), чтобы сделать это. Смотрите здесь .

...