Перегрузка доступа к полям класса(__get)

Sherman

Mephi
Перегрузка доступа к полям класса(__get)

$itemInfo — объект класса Item, у которого также перегружен данный метод.

Код:
class BaseItem
{
  private $itemInfo = null;
  function __consctruct()
  {
     $this->itemInfo = new Item();
  }
  ...
  function __get($key)
  {
    if (isset($this->itemInfo->$key))
    {			
       return $this->itemInfo->$key;
    }
    return null;
  }
  ...
}
если сделать так:

$itmObj = new BaseItem();
$itmObj->FillData(); // заполняем объект itemInfo данными

затем:

echo $itmObj->key;

Фишка в том, что если убрать проверку на существование (isset), тогда все будет ок, если нет, тогда значение не возвращается.

Вопросы зачем мне это нужно не канают.

p.s.

а вот так, все работает:

Код:
$value = $this->itemInfo->$key;
if (isset($value))
{				
  return $value;
}
return null;

-~{}~ 15.08.05 14:58:

господа, а кто-нибудь может объяснить, почему так работает разыменовывание?
 

Profic

just Profic (PHP5 BetaTeam)
Если правильно помню, то никто не обещал, что isset() будет работает с перегрузкой.
ПыСы: isset() проверяет наличие реального свойства, которого как я понимаю нет. Вот и обламывается.
 

Sherman

Mephi
2Профик, дело в том, что и другие функции ведут себя также, например empty...
 

Profic

just Profic (PHP5 BetaTeam)
Sherman
А чем empty() принципиально отличается от isset()?

tony2001
Гы, только вчера смотрел и там не было упоминаний про __isset() и __unset(). Дока обновляется своевременно, что есть гуд :)
 

Sherman

Mephi
С помощью empty мы проверяем не только сущестоввание, но еще и наличие какого-либо значения у переменной, типа:

PHP:
function empty($var)
{
   if (isset($var) && $var != null)
   {
     return true;
   }
   retrun false;
}
Или я не прав?
 
Сверху