Notice: Undefined property (ООП)
Составил такой код:
interface Say { public function say(); } abstract class Animal implements Say { private $name; private $nickname; private $coloring; private $breed; private $age; public function __construct($name, $nickname, $coloring, $breed, $age) { $this->name = $name; $this->nickname = $nickname; $this->coloring = $coloring; $this->breed = $breed; $this->age = $age; } public function getName() { return $this->name; return $this->nickname; return $this->coloring; return $this->breed; return $this->age; } } class Dog extends Animal { public function __construct($name, $nickname, $coloring, $breed, $age) { parent:: __construct($name, $nickname, $coloring, $breed, $age); } public function say() { echo "Я - ".$this->getName()." ".$this->coloring." окраса, "."породы - ".$this->breed.", зовут меня - ".$this->nickname.", мне сейчас ".$this->age; } } class Cat extends Animal { public function __construct($name, $nickname, $coloring, $breed, $age) { parent:: __construct($name, $nickname, $coloring, $breed, $age); } public function say() { echo "Я - ".$this->getName()." ".$this->coloring." окраса, "."породы - ".$this->breed.", зовут меня - ".$this->nickname.", мне сейчас ".$this->age; } } $dog = new Dog('собака', 'Рекс', 'белого', 'Немец', '5 лет'); $dog->say(); echo "<br><br>"; $cat = new Cat('кошка', 'Маркиза', 'пятнистого', 'Сфинкс', '2 года'); $cat->say(); Данный код выдаёт ошибки следующего содержания: 1. " Notice: Undefined property: Dog::$coloring in C:\xampp\htdocs\www\beonmax.com\PHP\Object_oriente d_programming\Homework_for_video_lesson_68_syntax. php on line 41 "; 2. " Notice: Undefined property: Dog::$breed in C:\xampp\htdocs\www\beonmax.com\PHP\Object_oriente d_programming\Homework_for_video_lesson_68_syntax. php on line 41 " ... и т.д... В чём моя ошибка? Вроде всё правильно делаю. |
Вы не можете наследовать private свойства, только protected или public! Если вы хотите обратиться к ним из наследованного класса, то измените на protected, так что они станут доступны.
Запустить <?php interface Say { public function say(); } abstract class Animal implements Say { protected $name; protected $nickname; protected $coloring; protected $breed; protected $age; public function __construct($name, $nickname, $coloring, $breed, $age) { $this->name = $name; $this->nickname = $nickname; $this->coloring = $coloring; $this->breed = $breed; $this->age = $age; } } class Dog extends Animal { public function say() { return "Я - {$this->name} {$this->coloring} окраса, породы - {$this->breed}, зовут меня - {$this->nickname}, мне сейчас {$this->age}"; } } class Cat extends Animal { public function say() { return "Я - {$this->name} {$this->coloring} окраса, породы - {$this->breed}, зовут меня - {$this->nickname}, мне сейчас {$this->age}"; } } $dog = new Dog('собака', 'Рекс', 'белого', 'Немец', '5 лет'); echo $dog->say(); echo "<br><br>"; $cat = new Cat('кошка', 'Маркиза', 'пятнистого', 'Сфинкс', '2 года'); echo $cat->say(); ?> |
garrip91, обратите также внимание на то, что Malleys удалил из вашего кода конструкторы классов Dog и Cat.
Нет никакого смысла создавать конструктор у этих классов только для того, чтобы вызвать конструктор родителя, он и так будет вызван. В методе getName класса Animal будет возвращено только значение свойства name, все остальные возвращения никогда не будут выполнены, т.е. их можно удалить. |
Часовой пояс GMT +3, время: 22:47. |