php面向物件之private、protected、public三者許可權控制區別
阿新 • • 發佈:2019-01-06
private protected public
本類內 Y Y Y
子類內 N Y Y
外部 N N Y
注意:
在java中,如果屬性/方法前面不寫任何引數
即public/protected/private都不寫,也是可以的,friendly
在PHP中,如果public/protected/private 都不寫,
則理解為 public 建議養成好習慣,不要不寫
class Human {
private $name = 'zhangsan';
protected $money = 3000;
public $age = 28;
public function say() {
echo '我叫',$this->name,'<br />';
echo '我有',$this->money,'元錢<br />';
echo '我今年',$this->age,'歲';
}
}
class Stu extends Human {
private $friend = '小花';
public function talk() {
echo '我叫',$this->name,'<br />';
echo '我有',$this->money,'元錢<br />';
echo '我今年',$this->age,'歲<br />';
}
}
$ming = new Stu();
echo $ming->age,'<br />'; // 28
echo $ming->friend; //出錯:因為類外不能呼叫private
echo $ming->money; //出錯:因為類外不能呼叫protected屬性
$ming->talk();
/**
出錯:
Notice: Undefined property: Stu::$name in 。。。
我有3000元錢
我今年28歲
分析原因: Undefined property: Stu::$name 這是說明:stu物件 沒有name屬性
但昨天說,私有的不是可以繼承嗎?
是可以繼承過來,但系統有標記,標記其為父類層面的私有屬性.
因此無權呼叫,導致此錯發生.
可以分析出:
protected 可以在 子類內訪問
protected能在子類訪問,本類內能否訪問?
答:當然可以