一、使用场景
访问修饰符 | 本类 | 父类 | 类外 |
---|---|---|---|
public (公有的) | √ | √ | √ |
protected(受保护的) | √ | √ | × |
private(私有的) | √ | × | × |
public(公有):公有的类成员可以在 任何地方 被访问。(例:你的名字大家都可以知道)
protected(受保护):受保护的类成员则可以被其自身以及 子类 和 父类 访问。(例:你家的财产,你和你爸都可以拥有)
private(私有):私有的类成员则只能被其定义所在的类(即 本类)访问。(例:你的私房钱,只有你自己知道)
二、举例
1) 直接访问
class Animal{
public $name = '小狗';
public $length;
protected $color = '白色';
private $hair = '毛茸茸';
}
$obj = new Animal();
var_dump($obj->name);
echo '<br>';
var_dump($obj->color);
echo '<br>';
var_dump($obj->hair);
运行结果:
注:我们虽然无法通过对象在外部访问到 protected
和 private
修饰的属性或方法,但是我们可以在对象的方法中,基于对象的访问来访问到里面的属性和方法。$this
代表当前实例化的对象(此处$this
指 Animal
类)
2) 解决不能在类外访问 protected
和 private
定义的属性和方法(在类的方法中,用$this
)
class Animal{
public $name = '小狗';
public $length;
protected $color = '白色';
private $hair = '毛茸茸';
public function all()
{
$color = $this->color;
$hair = $this->hair;
return $color.$hair;
}
}
$obj = new Animal();
var_dump($obj->name);
echo '<br>';
var_dump($obj->all());
运行结果:
3) 在子类中使用父类中的方法
class Animal
{
public $name = '小狗';
public $length;
protected $color = '白色'; // 在子类与父类中使用
private $hair = '毛绒绒'; // 在本类中使用
public function all()
{
$color = $this->color;
$hair = $this->hair;
return $color.$hair;
}
public function run()
{
return '奔跑';
}
}
/*
* class Chu
* extends 继承的关键字
* 被继承的为父类,继承的为子类
* 子类一旦继承父类后,可以使用当中修饰符满足的方法和属性
*/
class Chu extends Animal
{
public function get()
{
$color = $this->color;
$hair = $this->hair;
return $color;
}
}
$obj = new Chu();
var_dump($obj->get());
echo '<br>';
var_dump($obj->run());
运行结果:
注:子类可以使用父类中 public
和 protected
所修饰的属性和方法,但是不可以使用 private
所修饰的方法(private
所修饰的方法,只能在本类中使用).