По работе __get

Тема в разделе "Как сделать...", создана пользователем zek24, 22 янв 2014.

  1. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    777
    Симпатии:
    231
    привет,
    в процессе изучения ооп пхп возникла ситуация для меня непонятная
    вот код
    PHP:
    class Get_Set{
      private 
    $name "anton";
      function 
    __get($name){
      
    $met "get".$name;
      if(
    method_exists($this$met)){
      echo 
    $met."<hr>";
      return 
    $this->$met();  
      }else{
      echo 
    "свойство $name не найдено!";
      }
      }
      function 
    getname(){
      echo 
    $this->$name.'33';
      }
    }
    $gettt = new Get_Set;
    echo 
    $gettt->name."<hr>";
    Сразу ряд вопросов:
    1. почему при попытке доступа к приватному свойству не отобразилась ошибка?
    2. если мы попадаем в echo $this->$name.'33'; то выводится только 33 без anton?
    3. почему мы попадаем в echo "свойство $name не найдено!"; если метод getname существует?
     
  2. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    2. Нужно обращаться без "$": echo $this->name.'33';
     
    zek24 нравится это.
  3. zek24

    zek24

    Moderator
    Регистр.:
    14 ноя 2009
    Сообщения:
    777
    Симпатии:
    231
    да, копипаст подвел)) теперь все логично, но почему срабатывал пункт 3 непонятно.
     
  4. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.244
    сделай var_dump($name); и посмотри исходник, если запускаешь из браузера, сразу после объявления функции function __get($name) - думаю тебя ждёт сюрприз относительно того, какое именно имя свойства ты передал объекту...
     
    zek24 нравится это.
  5. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    359
    Симпатии:
    243
    у тебя getname ничего не возвращает, а делает echo
    замени на
    Код:
    return $this->name...
     
    zek24 нравится это.