Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.01.2019, 23:09
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

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 "
... и т.д...

В чём моя ошибка? Вроде всё правильно делаю.

Последний раз редактировалось garrip91, 21.01.2019 в 23:13. Причина: Некоторые исправления в коде!
Ответить с цитированием
  #2 (permalink)  
Старый 22.01.2019, 01:13
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Вы не можете наследовать 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();

?>

Последний раз редактировалось Malleys, 22.01.2019 в 01:18.
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2019, 09:40
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,707

garrip91, обратите также внимание на то, что Malleys удалил из вашего кода конструкторы классов Dog и Cat.
Нет никакого смысла создавать конструктор у этих классов только для того, чтобы вызвать конструктор родителя, он и так будет вызван.

В методе getName класса Animal будет возвращено только значение свойства name, все остальные возвращения никогда не будут выполнены, т.е. их можно удалить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
uncaught TypeError: Cannot read property 'top' of undefined makedonets Общие вопросы Javascript 0 22.03.2017 12:45
Cannot read property 'safari' of undefined vladik_vodopadik Javascript под браузер 1 14.12.2015 17:35
Cannot read property 'query' of undefined balalay12 Angular.js 1 30.10.2015 19:27
Ошибка Uncaught TypeError: Cannot read property 'elements' of undefined Allality Общие вопросы Javascript 14 29.07.2012 18:35
Cannot read property 'items' of undefined khusamov ExtJS 0 11.05.2012 04:33