Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Опечатка в книжке или это я туплю?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nkl
Отправлено: 17 Марта, 2012 - 22:06:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Начинаю потихоньку понимать ООП в PHP. Запнулся на одном моменте и попрошу вас помочь мне разобраться. Вот мой класс:
PHP:
скопировать код в буфер обмена
  1.  
  2. class hardware{
  3.         var $devid;
  4.         function __construct($param)
  5.         {
  6.                 $devid = $param;
  7.                 echo 'Переменной $devid было присвоено значение '.$param;
  8.         }
  9.         function __get($name)
  10.         {
  11.                 return $this->$name;
  12.         }
  13.         function __set($name, $value)
  14.         {
  15.                 $this->$name = $value;
  16.         }
  17. }
  18.  
  19. $device = new hardware(1);
  20. $device2 = new hardware(15);
  21. $device3 = new hardware(21);
  22.  
  23. echo $device->devid;
  24.  


На выходе у меня вот что
CODE (html):
скопировать код в буфер обмена
  1. Переменной $devid было присвоено значение 1Переменной $devid было присвоено значение 15Переменной $devid было присвоено значение 21


Почему не выводится последняя строка echo $device->devid;?

Делаю так: echo $device->$devid; Получаю фатальную ошибку. Хотя вот цитата из книги:
Показанный ниже оператор:

приведет к неявному вызову функции __set()с передачей ей $devid в качестве значения параметра $name и 5 в качестве значения параметра $value;
Функция __get() работает аналогичным образом...

Так почему же мне не в место значения атрибута $devid выводится либо пустое место, либо фатальная ошибка?
 
 Top
OrmaJever Модератор
Отправлено: 17 Марта, 2012 - 22:13:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Во-первых это стиль php4. Прочитайте http://php.su/learnphp/phpoo/?php5
Во-вторых вы просто не присволи ей значение, в конструкторе нужно $this->devid = $param;
nkl пишет:
Делаю так: echo $device->$devid; Получаю фатальную ошибку. Хотя вот цитата из книги:

Эти книги повыкидывать надо. Для обращения к свойствам класса нужно использовать имя без знака "$", только к статическим так className::$var


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
EuGen Администратор
Отправлено: 17 Марта, 2012 - 22:16:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Во-первых,
PHP:
скопировать код в буфер обмена
  1. function __construct($param)
  2.         {
  3.                 $devid = $param;
  4.                 echo 'Переменной $devid было присвоено значение '.$param;
  5.         }

- измените на
PHP:
скопировать код в буфер обмена
  1. function __construct($param)
  2.         {
  3.                 $this->devid = $param;
  4.                 echo 'Переменной $devid было присвоено значение '.$param;
  5.         }

Во-вторых,
Обращение $this->$devid приводит к фатальной ошибке, так как $devid воспринимается как переменная (а она не существует). Обращаться нужно как $device->devid


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB