Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 什么';通过父构造函数冒泡动态数据的方法是什么?_Php_Oop_Inheritance - Fatal编程技术网

Php 什么';通过父构造函数冒泡动态数据的方法是什么?

Php 什么';通过父构造函数冒泡动态数据的方法是什么?,php,oop,inheritance,Php,Oop,Inheritance,假设我有一个农场,里面有各种各样的动物。当新动物到来时,我想欢迎它们。我不想为每个动物重新创建欢迎函数,所以我将其设为1,并将其扩展到动物类 class Chicken { public function __construct(ChickenCoop $chickenCoop) { $this->chickenCoop = $chickenCoop; } public function gate() { $this

假设我有一个农场,里面有各种各样的动物。当新动物到来时,我想欢迎它们。我不想为每个动物重新创建欢迎函数,所以我将其设为1,并将其扩展到动物类

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
{
    private array $chickens = [];

    public function __construct()
    {
        parent::__construct($this->chickens);
    }

    public function addChicken(string $chicken)
    {
        $this->chickens[] = $chicken;
    }
}

class AnimalHousing
{
    private array $animals;

    public function __construct(array $animals)
    {
        $this->animals = $animals;
    }

    public function welcomeAnimals()
    {
        $body = "welcome ";

        foreach ($this->animals as $animal) {
            $body .= "{$animal} ,";
        }

        return $body;
    }
}

问题是父对象::_构造($this->chicks);为其父级构造空数组。如何将这些鸡的数据传递给AnimalHousing类?

你所做的没有多大意义

为什么在父类中需要一个与“动物”数组分开的“鸡”数组?在这种情况下,“动物”名单的意义是什么?它不能动态更新。由于
$fecks
只是一个字符串列表(不是表示鸡的更复杂类型),因此它不会在
$animals
列表上方添加任何值

将“addChicken”添加到父类中的“animals”列表中,而不是在子类中添加单独的列表,这样做更有意义

也许是这样的:

<?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();