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