PHP 面向对象 (一)权限修饰符

权限修饰符

作用:控制访问权限,修饰属性,方法

权限控制符:public(公开的) protected(受保护的) private(私有的)

区别:

  1. public 类内,类外,可以访问
  2. protected 类内,子类的类内,可以访问
  3. private 只有当前类的类内,可以访问

关于继承:

  1. 子类可以继承父类私有属性,不能继承私有方法
  2. 子类继承自父类的属性方法,子类必须和父类的修饰相同,或者更松弛。
    1. 父类为public,则子类必须为public。
    2. 父类为protected,子类需为public 或 protected。
    3. 父类为private,则子类可为public protected private

实践

编写父类Father 和 子类Son

<?php
    class Father{
        public $name;
        protected $salary;
        private $money; //私房钱

        public function __construct($name, $salary, $money)
        {
            $this->name = $name;
            $this->salary = $salary;
            $this->money = $money;
        }

        public function getName()
        {
            return $this->name;
        }

        protected function getSalary()
        {
            return $this->salary;
        }

        private function getMoney()
        {
            return $this->salary;
        }

        public function getInfo()
        {
            // 所有属性在方法内都能访问
            echo $this->name . "的薪水一个月" . $this->salary;
            echo "存款" . $this->money;
            echo "<br/>";
        }
    }

    class Son extends Father
    {
        //private $salary; //控制权限必须必父类更松弛,可以声明为protected 和 public
        private $age;
        public function getFatherInfo()
        {
            //子类不能调用父类的属性,可以调用父类的方法获取属性
            parent::getName();
            parent::getSalary();
            //parent::getMoney(); //子类不能调用父类私有方法
            //$this->getMoney(); //子类不能继承父类私有方法,私有属性可以继承(通过访问继承的公开方法,即可访问到私有属性)
        }
    }

//父类
$father1 = new Father('father1', 5000, 100000);
//类内public protected private属性都可以访问
$father1->getInfo();
//类外只能访问 public
echo $father1->name;
//    echo $father1->salary; //受保护属性类外不能访问
//    echo $father1->money; //私有属性类外不能访问

//子类继承父类
$son1 = new Son('son1', 2000, 0);
//类内public protected private属性都可以访问
$son1->getInfo();
//类外只能访问 public
echo $son1->name;
//    echo $son1->salary; //受保护属性类外不能访问
//    echo $son1->money; //私有属性类外不能访问

复制代码,即可运行。 谢谢你的浏览,如有错误,欢迎指正哈!!!

本作品采用《CC 协议》,转载必须注明作者和本文链接
写的不好,就当是整理下思绪吧。
讨论数量: 3

关于继承那里,第二点:子类继承自父类的属性方法,必须比父类更松弛;
描述的感觉有点歧义
感觉应该是子类必须和父类的修饰相同,或者更松弛。

5年前 评论

@aizen 嗯嗯,相同或更加松弛,我更正一下哈,感谢

5年前 评论

和Java的权限修饰有一些不一样。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!