图片.png
    动物的属性比生物多
    图片.png
    图片.png

    1. <?php
    2. class Animal
    3. {
    4. public $name='小芳';
    5. public function eat()
    6. {
    7. echo '我会吃饭';
    8. }
    9. }
    10. //Person类继承自Animal类
    11. class Person extends Animal
    12. {
    13. //子类继承了父类,那么就拥有父类的属性和方法
    14. //子类拥有父类的所有属性,还有自己独有的属性
    15. public $age=10;
    16. }
    17. $xiaoming=new Person();
    18. //echo $xiaoming->name; //小芳
    19. //$xiaoming->eat();//我会吃饭
    20. echo $xiaoming->age; //10

    访问权限
    图片.png

    1. <?php
    2. class Person{
    3. public $name;
    4. protected $age;
    5. private $height;
    6. public function __construct($name,$age,$height){
    7. $this->name=$name;
    8. $this->age=$age;
    9. $this->height=$height;
    10. }
    11. }
    12. //在类的外部只能直接访问公共属性public
    13. $xiaoming=new Person('小明',10,176);
    14. echo $xiaoming->name;//小明
    15. echo $xiaoming->age;//报错
    16. echo $xiaoming->height;//报错

    如果在继承里面呢?

    1. <?php
    2. class Animal{
    3. public $name='科比';
    4. protected $age=35;
    5. private $height=2;
    6. }
    7. class Person extends Animal //Person继承自Animal类
    8. { //如果直接写function,前面不写public,默认代表这个方法的属性是public
    9. public function say()
    10. {
    11. echo '我的姓名是:'.$this->name.'<br />';
    12. echo '我的年龄是:'.$this->age.'<br />';
    13. echo '我的身高是:'.$this->height.'<br />';
    14. }
    15. }
    16. $ming=new Person();
    17. $ming->say();

    图片.png
    我们可以看到public和protected都已经继承过来了,但是private属性没有继承过来

    图片.png

    重写方法:override

    图片.png
    重写是一种多态,封装、继承、多态是我们面向对象语言的三大特征。
    多态就是给不同的对象执行相同的接口,得到的反馈是不一样的

    完全重写:

    1. <?php
    2. class Father
    3. {
    4. public function jump()
    5. {
    6. echo '我能跳3米<br />';
    7. }
    8. }
    9. class Son extends Father{
    10. //父类的方法不适合子类使用,那么这个时候子类可以重写父类的方法
    11. //完全重写
    12. public function jump()
    13. {
    14. echo '我能跳5米<br />';
    15. }
    16. }
    17. //子类调用的方法是子类重写后的方法,父类还是调用父类的方法
    18. $fa=new Father();
    19. $fa->jump();
    20. $ming = new Son();
    21. $ming->jump();

    在父类的基础上增加自己的功能(通过parent):先执行父类的方法再执行自己的功能

    1. <?php
    2. class Father
    3. {
    4. public $name;
    5. public $age;
    6. public function __construct($name,$age){
    7. $this->name=$name;
    8. $this->age=$age;
    9. }
    10. public function jump()
    11. {
    12. echo '我能跳3米<br />';
    13. }
    14. public function work()
    15. {
    16. echo '我勤勤恳恳的工作<br />';
    17. }
    18. }
    19. class Son extends Father{
    20. public $height;
    21. public $weight;
    22. public function __construct($name,$age,$height,$weight)
    23. {
    24. parent::__construct($name,$age);//在父类的基础上增加自己的功能 用parent调用父类方法
    25. $this->height=$height;
    26. $this->weight=$weight;
    27. }
    28. public function jump()
    29. {
    30. echo '我能跳5米<br />';
    31. }
    32. public function work()
    33. {
    34. //在父类的基础上增加自己的功能,这种重写,要首先调用父类的方法(通过parent关键字调用)
    35. parent::work();
    36. echo '我又谈了一个女朋友';
    37. }
    38. }
    39. $ming = new Son();
    40. $ming->work();
    41. /*
    42. 我勤勤恳恳的工作
    43. 我又谈了一个女朋友
    44. */

    final关键字:
    final:修饰类class,代表这个类不能被继承
    final:修饰方法method,代表这个方法不能被重写

    重写中的方法权限修改:
    public ====>public
    protected===> protected / public
    重写的时候权限只能放大不能缩小