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

Posted MrBear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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函数注释释放,得到下图结果:

以上是关于php 定义类属性和方法的public protected private 修饰词的区别的主要内容,如果未能解决你的问题,请参考以下文章

PHP类和对象之定义类的方法

是否可以在 PHP 中动态定义类属性值?

php 魔术方法__get()和__set()理解

php如何实现多继承?

PHP新手之学习类与对象

php学习八:封装