Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 使用parents方法填充子类的数组_Php - Fatal编程技术网

Php 使用parents方法填充子类的数组

Php 使用parents方法填充子类的数组,php,Php,我用两种方法创建了一个程序员类: 公共方法getLanguage()-它以数组的形式返回程序员知道的所有语言 公共方法addLanguage()-将新语言添加到语言列表中 class Programmer { private $languages = []; public function getLanguages() { return $this->languages; } public function addLanguag

我用两种方法创建了一个程序员类:

公共方法getLanguage()-它以数组的形式返回程序员知道的所有语言

公共方法addLanguage()-将新语言添加到语言列表中

class Programmer 
{
    private $languages = [];

    public function getLanguages()
    {
        return $this->languages;
    }

    public function addLanguage($language)
    {
        $this->languages[] = $language;
    }
}
我还创建了另一个ProgrammerTeacher类,它扩展了Programmer,并有一个额外的公共方法:

公共方法教学(程序员$Programmer,$language)-如果程序员教师知道所需的语言,则向程序员教授一种语言

class ProgrammerTeacher extends Programmer
{
    private $languages = [];

    public function teach(Programmer $programmer, $language)
    {
        if(in_array($language, $this->languages)) {
            $programmer->addLanguage($language);

            return true;
        }

        return false;
    }
}
例如,以下代码显示ProgrammerTeacher如何教程序员新语言(“PHP”):

数组为空,因为此条件解析为false:

in_array($language, $this->languages)
这很奇怪,因为当我打电话时:

$teacher->getLanguages()
// result is Array ( [0] => PHP )

我认为我没有正确地理解简单的继承。有人能花点时间解释一下这里发生了什么吗?

您可以使用公共函数getLanguages()访问$languages属性,因为关键字public意味着每个人都可以访问它

但是您不能直接访问属性语言,因为它是父类的私有属性。因此,您不应该在子类中重新声明属性$languages,并更改“protected”中的private关键字,以便类程序员教师可以访问它

或者,您可以简单地使用方法getLanguages(),它是公共的

如果用以下条件替换\u数组($language,$this->languages)中的条件:在\u数组($language,$this->getLanguages())中,您将得到预期的结果


对不起,我的英语不是我的母语

Programmer
中的
private$languages
更改为
ProgrammerTeacher
中的
protected$languages
,并将其从
ProgrammerTeacher
中删除。
$teacher->getLanguages()
// result is Array ( [0] => PHP )