7.3.3 繼承與延遲靜態(tài)綁定
在創(chuàng)建類層次結(jié)構(gòu)時(shí),有時(shí)候回遇到這種情況,即父類方法要使用靜態(tài)類屬性,但靜態(tài)類屬性可能在子類中被覆蓋。這和 self 關(guān)鍵字的使用有關(guān)。我們看一個(gè)例子,其中 Employee 類和 Executive 類都做了一些修改:
<?php
class Employee
{
public static $favSport = "Football";
public static function watchTv()
{
echo "Watching ".self::$favSport;
}
}
class Executive extends Employee
{
public static $favSport= "Polo";
}
Executive::watchTv();
執(zhí)行代碼如下:
Watching Football
?因?yàn)?Executive 類繼承了 Employee 類中的方法,有人認(rèn)為這個(gè)例子的輸出應(yīng)該是 Watching Polo 。真是這樣嗎?實(shí)際上不是,這是因?yàn)?self 關(guān)鍵字是在編譯時(shí)確定它的作用范圍的,不是在運(yùn)行時(shí)、因此這個(gè)例子的輸出總是 Watching Football。PHP 解決這個(gè)問題的方法是改變一下 static 關(guān)鍵字的用法, 用它來表示我們需要在運(yùn)行時(shí)決定靜態(tài)屬性的作用域。想要完成這個(gè)任務(wù),你應(yīng)該改寫一下 watchTv() 方法,如下所示:
public static function watchTv()
{
echo "Watching " . static::$favSport;
}
?執(zhí)行代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-507423.html
Watching Polo文章來源地址http://www.zghlxwxcb.cn/news/detail-507423.html
到了這里,關(guān)于第七章 高級(jí) OOP 特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!