区别一下public,protected和private

定义

public,protected和private称为“访问修饰符”,可以通过在声明前加上这些关键字来定义属性,方法或常量的可见性。

public:公有类型,可以在任何地方访问。

protected:受保护类型,只能在类本身内以及继承和父类中访问。

private:私有类型,只能由定义该成员的类访问。该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能 调用私有类型的属性和方法

举几个例子。

1.Public

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php 
class pub{
public $message = "你看见了我";
function display(){
echo $this->message."<br/>";
}
}

//pub类的子类
class child extends pub{
function show(){
echo $this->message;
}
}

$obj = new child;
echo $obj->message."</br>";
$obj->display();//类内
$obj->show();//子类
//都可调用

image-20200526161822746

2.protected

把public改成protected,编译器提示:

通过父类类型的变量,是不允许访问protected成员的。只调用其本身和子类则正常输出。

image-20200526165538604

3.private

再改为private

image-20200526165749359

只能由定义该成员的类访问,由于它只对类的内部成员可见,所以要利用它,一般都会是写一个public的方法,再返回这个属性。

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class pri{
private $a = 'self';
public function test() {
$other = new self();
$other->a = '这样你才能看见我';
var_dump($other->a);
}
}

$obj = new pri();
$obj->test();

image-20200526171317806