Функция PHP Empty не работает, когда магический метод __get и __set определен в классе

В настоящее время я работаю в среде YII, где я создал класс, расширяющий CFormModel,

В этом классе я переопределяю следующие функции:

public function __get($name)
public function __set($name, $value)

Я установил следующие проверки, чтобы убедиться, что end_date и start_date не равны нулю.

if(!empty($this->end_date) AND !empty($this->start_date))
{
      **/*Not Working*/**
      /*Some Application Logic*/
}

Но он не работает должным образом, и условие не удовлетворяется. Когда я отлаживал код, я узнал, что $this->start_date и $this->end_date не пусты. После этого я изменил чеки на следующие:

if($this->end_date!='' AND $this->start_date!='')
{
      **/*Working*/**
      /*Some Application Logic*/
}

Он работает, как и ожидалось, но все же я не понимаю, почему пустая функция не работает должным образом. Это из-за магического метода ИЛИ есть ли какая-то причина для этой проблемы?


person sarvesh    schedule 16.12.2012    source источник


Ответы (1)


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

public function __isset($name) {
    return isset($this->data[$name]);
}

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

person Sherif    schedule 16.12.2012
comment
О, хорошо, спасибо за решения - person sarvesh; 16.12.2012