php类的访问修饰符
Public, protected, private
用来描述:
成员,在源代码中的哪些位置可以访问 。
Public:公共的:类内,类外,继承链类内
Protected: 类内,继承链类内。
Private:本类内。
一:Private:本类内。
<?php
class H {
// public function HgetP () {
//echo $this->p;
// echo self::$sp;
// }
public static function HgetP () {
// echo $this->p;
echo self::$sp;
}
}
class Z extends H {
//protected $p = 'value';
private $p = 'value'; //$p是私有的,只能在本类内部调用
public static $sp = 'static-value';
// public function ZgetP () {
// echo self::$sp;
// }
public static function ZgetP () {
// echo $this->p;
echo self::$sp;
}
}
class K extends Z {
public function KgetP () {
echo $this->p;
// echo self::$sp;
}
//public static function KgetP () {
//echo $this->p;
//echo self::$sp;
//}
}
//echo H::HgetP();
//echo Z::ZgetP();
//echo K::KgetP();
$o = new K;
$o->KgetP();//输出:Notice: Undefined property: K::$p
echo "<hr/>";
var_dump($o);//输出:object(K)#1 (1) { ["p":"Z":private]=> string(5) "value" }
$o->ZgetP(); //输出: static-value
二 Protected: 类内,继承链类内。(在类的继承的体系内都可以调用)
<?php
class H {
// public function HgetP () {
//echo $this->p;
// echo self::$sp;
// }
public static function HgetP () {
// echo $this->p;
echo self::$sp;
}
}
class Z extends H {
protected $p = 'value'; //$p是受保护的,在本类,本类的继承体系内部调用。
//private $p = 'value'; //$p是私有的,只能在本类内部调用
public static $sp = 'static-value';
// public function ZgetP () {
// echo self::$sp;
// }
public static function ZgetP () {
// echo $this->p;
echo self::$sp;
}
}
class K extends Z {
public function KgetP () {
echo $this->p;
// echo self::$sp;
}
//public static function KgetP () {
//echo $this->p;
//echo self::$sp;
//}
}
//echo H::HgetP();//如果是静态成员,则父类不能访问子类定义的静态成员。
//echo Z::ZgetP();
//echo K::KgetP();
$o = new K;
$o->KgetP();//输出:value
echo "<hr/>";
var_dump($o);//输出:object(K)#1 (1) { ["p":"Z":private]=> string(5) "value" }
$o->ZgetP(); //输出: static-value
php继承:
私有成员可以被继承。
如果是静态成员,则父类不能访问子类定义的静态成员。