分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

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

发布时间:2023-09-06 02:23责任编辑:傅花花关键词:暂无标签

这三个词在定义类的属性和方法时使用,其最大的区别在与他们作用域不同
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();

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

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved