oop

Методы доступа к свойствам объекта

Представим ситуацию: есть некоторый класс без свойств. Мы создали какой-то объект этого класса. И через объект обращаемся к свойству класса (такое свойство в классе не описано). Что будет? Никакой ошибки не будет. PHP сам создаст это свойство. См. пример:

class A{ //создаем класс пустой
}
$o = new A(); //создаем объект
$o->name="Max"; //обращаемся к свойству, которого нет

Хотя ошибки здесь не будет, так делать НЕ НАДО. Самого свойства не будет в описании класса, оно будет где-то там в коде.

Но что делать, если мы хотим назначать динамические свойства? В строке №4 кода идет присваивание к неизвестному свойству. Php прежде, чем создавать это свойство, идет в класс и пытается найти метод __set, куда передает имя и соответствующее значение. Если мы опишем __set, то php его вызовет. См. код ниже:

class A{
   public $user;
   function __set($n, $v){
      $this->user[$n]=$v} //сюда придут имя и значение свойства
   function __get($n){
      return $this->user[$n];}
}
$o = new A();
$o->name="Max";
echo $o->name;

В строке №10 (см. код выше) идет обращение к неизвестному свойству. В этом случае php ищет метод __get. И если он есть, php его вызывает (строки №5,6).

Т.е. метод __set применяется — когда php пытается поставить значение. А __get — когда php пытается взять значение.




Добавить комментарий

Ваш e-mail не будет опубликован.