php三种权限的详解

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修饰的属性或方法,只能该类自己内部调用,该类的外部和子类的内外部均不能调用;