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, время: 06:38. |