PHP类中有三种访问修饰符public、protected、private,在这里我详细梳理下这三种修饰符,下面以例子讲解。
/**
* public、protected、private修饰符权限
* car类
*/
class Car
{
public $carName = 'BZ';
protected $color = 'white';
private $price = '100万';
public function test1()
{
//内部可以调用public修饰的carName;
echo $this->carName;
}
public function test_protected_1()
{
//内部可以调用protected修饰的color
echo $this->color;
}
public function test_private_1()
{
//内部可以调用private修饰的price
echo $this->price;
}
}
/**
* bz继承于Car类
*/
class Bz extends Car
{
public function test2()
{
//子类内部调用carName;
echo $this->carName;
}
public function test_protected_2()
{
//子类内部可以调用protected修饰的color
echo $this->color;
}
public function test_private_2()
{
//子类内部不能调用private修饰的price
echo $this->price;
}
}
$bz = new Bz();
//测试public权限执行的代码,
// echo $bz->carName; //运行后可证明:外部可以调用;
// echo $bz->test1(); //运行后可证明:内部可以调用;
// echo $bz->test2(); //运行后可证明:子类内部可以调用;
//测试protected权限执行的代码
// echo $bz->color; //运行结果:Cannot access protected property,可证明:外部不能调用protected修饰的属性。
// echo $bz->test_protected_1();//运行后可证明:内部能调用protected修饰的属性。
// echo $bz->test_protected_2(); //运行后可证明:子类内部能调用protected修饰的属性。
//测试private权限执行的代码
// echo $bz->price; //运行结果:Undefined property,可证明:外部不能调用private修饰的属性。
// echo $bz->test_private_1();//运行后可证明:内部能调用private修饰的属性。
// echo $bz->test_private_2();//运行结果:Undefined property,可证明:子类内部不能调用private修饰的属性。
同理用这三种修饰符修饰的方法也是一样的权限,理解这样有助你理解封装,在这用代码测试运行方式让理解更轻松。
总结:public修饰的属性或方法,类和子类的内部和和外部都能调用;protected修饰的属性或方法,类和子类的内部都能调用,而在外部不能调用;private修饰的属性或方法,只能该类自己内部调用,该类的外部和子类的内外部均不能调用;
本文仅代表作者个人观点,不代表SEO研究协会网官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员。更多相关资讯,请到SEO研究协会网www.seoxiehui.cn学习互联网营销技术请到巨推学院www.jutuiedu.com。