在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/PHP  網(wǎng)絡安全/ php繼承及私有屬性訪問問題

php繼承及私有屬性訪問問題

class FatherClass
{
    // private $salary = 1000;
    private $salary = 1000;

    public function showInfo()
    {
        echo $this->phone . '<br/>';
        echo $this->salary . '<br/>';
    }
}

class ChildClass extends FatherClass
{
    protected $phone = '13987654321';
    private $salary = 20000;
}

$child = new ChildClass();
$child->showInfo();
echo '<pre>';
print_r($child);

輸出:
13987654321
1000
ChildClass Object
(
    [phone:protected] => 13987654321
    [salary:ChildClass:private] => 20000
    [salary:FatherClass:private] => 1000
)

疑問:
child實例現(xiàn)在有兩個私有屬性,我可以理解為成員方法在哪個類中,私有屬性就調用哪個類的
那么如果注釋掉父類中的 private $salary = 1000; 結果就會報錯:
Cannot access private property ChildClass::$salary····
不能訪問 ChildClass 類的私有屬性,我也可以理解,因為父類相對子類是類外,不能訪問私有屬性
那么 protected 的屬性也在類外,怎么又能訪問了呢?

如果理解為 子類繼承了父類的成員方法,所以訪問到了子類的 protected 屬性,那為什么又不能訪問子類的私有屬性呢?

還是說:私有屬性是區(qū)分類的(從打印結果看出),訪問私有屬性時,只訪問本類中的私有屬性,而訪問public和protected的屬性,則根據(jù)對象實例具體的值決定?

謝謝諸位,不知道我的描述清楚不

回答
編輯回答
逗婦乳
為什么又不能訪問子類的私有屬性呢

???如果能訪問,那私有屬性中的"私有"二字的意義是什么??

2017年5月29日 14:58
編輯回答
毀憶

protected能訪問, 是因為protected規(guī)定繼承類可以訪問,外部不可以. 設定這個關鍵字就是為了干這個的

2017年6月9日 03:14
編輯回答
好難瘦

protected: 關鍵字是只有這個類和這個類的子類可以訪問
private:只有類本身可以訪問
public: 所有類都能訪問

沒有為什么,這是語言規(guī)定。

2017年2月12日 21:47
編輯回答
涼汐

感謝諸位的幫助,可能我糾結的點描述的不是很清楚,我糾結的是,父類成員方法在調用私有屬性的邏輯是怎樣的····
現(xiàn)在搞明白了:
子類覆蓋了父類的 public、protected 屬性,而沒有覆蓋父類的 private 屬性,因此子類的實例現(xiàn)在有兩個同名的私有屬性,而調用的成員方法又在父類中,所以使用父類的私有屬性
如果父類沒有,則使用子類的,但使用子類的,又沒有權限(父類的成員方法相對于子類來說是類外),則提示錯誤
Fatal error: Uncaught Error: Cannot access private property ChildClass::$salary in ···
如果子類也沒有,會提示
Notice: Undefined property: ChildClass::$salary in ····
這說明PHP內部確實先找了子類的,如果有、但發(fā)現(xiàn)沒有權限,所以提示上面的 Fatal error

2017年8月25日 09:05