parent 这个关键词可以让我们在子类里面去引用在父类里面公开的或者受保护的方法,或者也可以去引用在父类里面的静态的属性。
先打开 index.php ... 这里有两个属性 .. track_name ,它是一个公开的静态的属性 ... 还有 track_artist ... 是一个公开的属性 .. 另外还有一个方法 .. track_playing() .. 我们把这里的 static 先去掉 ... 让它变成一个普通公开的方法 ...
在下面 Player 这个类,继承了上面的 Track 类 ...
在这个类里,只定义了一个 the_track_name 方法 ... 在这个方法里,如果想要去引用父类里的属性 ... 可以使用 parent ... 后面加上两个冒号 .. 也就是范围解析操作符 .. 然后是静态的属性的名称 .. track_name ..
class Player extends Track
{
public function the_track_name() {
return parent::$track_name;
}
}
在下面, 再去基于 Player 这个类创建一个对象 ... 然后调用对象的 the_track_name() 这个方法 ...
$my_player = new Player();
echo $my_player->the_track_name();
回到浏览器 ... 会显示 Magic 这个字符串 ... 这个字符串是 Track 这个类里面,track_name 这个静态属性的值 ... 因为我们在 Player 类里,使用了 parent 来引用了它的父类的 track_name 这个静态属性,所以,在这里会显示出这个属性里的值。
下面再试一下 track_artist 这个属性 ... 回到 index.php ... track_name 换成 track_artist ... 回到浏览器 ... 提示:Fatal error: Access to undeclared static property: Track::$track_artist
不能访问没有定义的静态属性,Track::$track_artist ...
这是因为,在 Track 这个类里,track_artist 属性不是一个静态的属性,所以在它的子类里面使用 parent 引用这个属性的时候,就会出现这样的错误提示。也就是说,我们只能使用 parent 去引用父类里面的静态的属性。
下面,可以再去试一下,引用父类里的方法 ... 同样使用 parent 关键词 ... 加上方法的名称 ... track_playing()
class Player extends Track
{
public function the_track_name() {
return parent::track_playing();
}
}
再回到浏览器... 显示正在播放 Magic ...