То, что вы делаете, на самом деле не имеет большого смысла.
Зачем вам нужен массив "цыплят", отдельный от массива "животных" в родительском классе? Какой смысл в списке животных в этом случае? Это не может быть динамически обновлено. А поскольку $chickens
- это просто список строк (а не какой-то более сложный тип, определяющий c для представления цыплят), он не добавляет никакого значения сверх списка $animals
.
Было бы более целесообразно добавить addChicken в список «животных» в родительском классе, а не в отдельный список в дочернем классе.
Возможно, что-то подобное :
<?php
class Chicken
{
public function __construct(ChickenCoop $chickenCoop)
{
$this->chickenCoop = $chickenCoop;
}
public function gate()
{
$this->chickenCoop->addChicken('Clara');
$this->chickenCoop->addChicken('Paula');
$this->chickenCoop->addChicken('Betty');
echo $this->chickenCoop->welcomeAnimals();
}
}
class ChickenCoop extends AnimalHousing
{
public function __construct()
{
parent::__construct();
}
public function addChicken(string $chicken)
{
$this->animals[] = $chicken;
}
}
class AnimalHousing
{
protected $animals = [];
public function __construct()
{
}
public function welcomeAnimals()
{
$body = "welcome ";
foreach ($this->animals as $animal) {
$body .= "{$animal} ,";
}
return $body;
}
}
$coop = new ChickenCoop();
$chick = new Chicken($coop);
$chick->gate();
Демонстрация: http://sandbox.onlinephpfunctions.com/code/37c101fc4861dacf64c417e3213869e20e6847a1
(В настоящее время технически наличие подкласса "Цыпленок Coop" на самом деле не добавляет любое значение вообще, так как вы могли бы просто иметь функцию «addAnimal» в родительском классе и вместо этого создать экземпляр AnimalHousing.Но я предполагаю, что вы, возможно, намереваетесь добавить больше функциональности c, определяемой по умолчанию, к классу в будущем, поэтому по этой причине я не буду рекомендовать удалить его полностью.)