php属性修饰词,php 定义类属性和方法的public protected private 修饰词的区别

这三个词在定义类的属性和方法时使用,其最大的区别在与他们作用域不同

public :全局使用,不仅是本类,其子类,创建的对象都可以使用,甚至子类的子类由于继承关系,也可以使用.

protected:本类和其子类使用,如果后续有继承的话,

private : 仅限本类使用

class ClassA

{

public $a = 1;

protected $b = 2;

private $c = 3;

public function share() {

echo ‘a=‘.$this->a."\n";

echo ‘b=‘.$this->b."\n";

echo ‘c=‘.$this->c."\n";

}

protected function fuZi() {

echo ‘a=‘.$this->a."\n";

echo ‘b=‘.$this->b."\n";

echo ‘c=‘.$this->c."\n";

}

}

class ClassB extends ClassA

{

public function jiCheng() {

echo ‘我是B类继承了protected的属性b=‘.$this->b."\n";

echo ‘我是B类继承的protected方法‘.parent::fuZi()."\n";

}

//

/*protected function fuzi()

{

echo ‘i am b‘;

}*/

}

class ClassC extends ClassB

{

public function Cji() {

echo ‘我是C类继承了B类a=‘.$this->a."\n";

echo ‘我是C类继承了B类b=‘.$this->b."\n";

$this->fuZi();

}

}

$classB = new ClassB();

$classB->jiCheng();//经过测试继承的protected方法属性都可以获取

$classC = new ClassC();

$classC->Cji();

执行结果如下图

82f7ee7dd613dd0370bb9c2bb3d0e723.png

由于B继承了A,C又继承了B,因此就将A里protected属性和方法传递到了C,如果在B里面使用函数的覆盖,会发现C类里的fuZi函数也跟着变化,这说明protected属性的作用域是本类和子类,如果在子类中进行了覆盖,后续使用将是新的函数,将代码中B类fuZi函数注释释放,得到下图结果:

ed2b2f5d065af781fbfef836326503bd.png

原文:https://www.cnblogs.com/MrBear/p/9988515.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值