一個很難理解的PHP繼承的問題!

來源:互聯網
上載者:User
class B
{
public $name ="aaa";
function fb()
{
echo get_class($this),"
";
echo $this->name,"
";
}
}

class Eb extends B
{
public $name = "xxxxxxxxxxxxxxsylar";

function __construct()
{
parent::fb();
}
}


$eb = new Eb();


// 父類和子類中的$name均聲明為public時;執行Eb的建構函式,輸出的結果是子類中$name的值xxxxxxxxxxxxxxsylar
// 父類和子類中的$name均聲明為private時;執行Eb的建構函式,輸出的結果是子類中$name的值aaa

求解?


回複討論(解決方案)

$name均聲明為public時,自然是子類覆蓋父類
這一點應該不會有問題吧?
$name均聲明為private時,因為方法 fb 是父類的,當然也只能訪問父類的私人屬性

你把 fb 方法抄寫到 Eb 中,並在 __construct 中加入 $this->fb();
就真相大白了

這個是叫重載
因為是public 子類從父類繼承過來變數name 並對其重載,覆蓋了原來的值,
private 的時候,子類不能覆蓋父類的變數,這時候就只能輸出父類自己本來的值了。

1.私人屬性不能被覆蓋,
2.子類調用父類私人屬性 當然直接輸出父類的了!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.