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
Форумы портала PHP.SU :: Версия для печати :: Опечатка в книжке или это я туплю?
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Опечатка в книжке или это я туплю?

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

1. nkl - 17 Марта, 2012 - 22:06:56 - перейти к сообщению
Начинаю потихоньку понимать ООП в 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 выводится либо пустое место, либо фатальная ошибка?
2. OrmaJever - 17 Марта, 2012 - 22:13:42 - перейти к сообщению
Во-первых это стиль php4. Прочитайте http://php.su/learnphp/phpoo/?php5
Во-вторых вы просто не присволи ей значение, в конструкторе нужно $this->devid = $param;
nkl пишет:
Делаю так: echo $device->$devid; Получаю фатальную ошибку. Хотя вот цитата из книги:

Эти книги повыкидывать надо. Для обращения к свойствам класса нужно использовать имя без знака "$", только к статическим так className::$var
3. EuGen - 17 Марта, 2012 - 22:16:39 - перейти к сообщению
Во-первых,
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

 

Powered by ExBB FM 1.0 RC1