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();

执行结果如下图

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

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

时间: 2024-08-29 17:25:21

php 定义类属性和方法的public protected private 修饰词的区别的相关文章

php类点滴---访问修饰符public protected private

public可以被继承,可以外部访问(也就是实例化对象可以直接访问) protected受保护的,可以被子类继承,无法外部访问 private继承,外部访问都别想 <?phpclass coach{ public $master = "老张"; protected $lover = "丁大锅"; private $lovegame = "SM"; public function slogan() { echo "吼吼~哈哈~&qu

javascript构造函数类和原型prototype定义的属性和方法的区别

1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份而写在类中的方法,实例化的时候会在每个实例中再复制一份,所以消耗的内存更高所以没有特殊原因,我们一般把属性写到类中,而行为写到原型中2.构造函数中定义的属性和方法要比原型中定义的属性和方法的优先级高,如果定义了同名称的属性和方法,构造函数中的将会覆盖原型中的代码如下: <!DOCTYPE html> <html> <

14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫"基类",子类也叫"派生类" 单继承:一个类只能从

php 类 属性和方法的关系

一 . 属性关系 1 .  public属性:在类的外部和内部都可以调用  被继承能够重构 2 .  protected属性:在类的内部可以调用外部不能可以被继承并且重构 3 .  private属性:只有在类的内部调用 不能被继承 4 .  static属性:类的内部和外部都能调用  内部调用方法(self::属性变量) 外部调用方法(类名::属性变量) 二 . 方法关系 1 . public方法:在类的外部和内部都可以调用 可以被继承 2 . protected方法:在类的内部可以调用外部不

python干货-类属性和方法,类的方法重写

类属性与方法 类的私有属性 __private_attrs: 两个下划线开头,表明为私有,外部不可用,内部使用时self.__private_attrs. 类的方法 在类的内部,使用 def 关键字来定义一个方法,类方法必须包含参数 self,且为第一个参数.self的名称也可自己取,如使用this,但是建议还是用self为好. 类的私有方法 __private_method: 两个下划线开头,为私有方法,只能在类的内部调用 ,不能在类的外部调用.self.__private_methods.

C++:继承访问属性(public/protected/private)

? 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: 1 #include<iostream> 2 using namespace std; 3 class Father{ 4 public: 5 Father()=default; 6 void Father_show1(){ 7 cout<<"调用Father类的public方法:Father_show1"<<endl; 8 } 9 protected: 1

php public protected private属性实例详解

php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰. public 表示全局,类内部外部子类都可以访问:private 表示私有的,只有本类内部可以使用:protected 表示受保护的,只有本类或子类或父类中可以访问: <?php//父类class father{ public function a(){ echo "function a"; } private functio

C++中public,protected,private访问

总结:1. protected和private的区别在于 ,protected的访问标号限制,能够被派生类的成员函数访问,而private不能2. protected和publice的区别在于,protected的访问限制,使其不能被基类的对象访问. -----------------------------------------------------第一:private, public, protected 访问标号的访问范围.private:只能由1.该类中的函数.2.其友元函数访问.不

访问控制public/protected/private的区别

Java支持四种不同的访问权限: 修饰符 说明 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private 私有的,在同一类内可见. 默认的 在同一包内可见.默认不使用任何修饰符. public:公有的 被声明为public的类.方法.构造方法和接口能够被任何其他类访问. 如果几个相互访问的public类分布在不用的包中,则需要导入相应public类所在的包.由于类的继承性,类所有的公有方法和变量都能被其子类继承. protected:受保