一起源码网

  • www.171739.xyz
  • 全球最大的互联网技术和资源下载平台
搜索
猜你喜欢
查看: 5746|回复: 1
打印 上一主题 下一主题

php类的继承用法实例详解

[复制链接]

0

主题

0

帖子

1万

积分

钻石会员

Rank: 8Rank: 8

积分
17424
QQ
跳转到指定楼层
楼主
发表于 2020-3-13 21:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在PHP中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就能得到相应的功能。假设大致有这么一个父类:

<?php
class Father{

    public function construct(){
        echo '我是父类的构造方法!';
    }

    protected function say($str = 'Hello World!'){
        echo '说了一句话:' . $str;
    }
}
?>

然后呢,搞一个子类去继承他:

<?php

class chirld extends Father{

    public construct(){
        echo '我是子类的构造方法~';
    }
}

此时你实例化子类,结果将会是我是子类的构造方法~
当然,因为继承关系,所以子类是可以调用父类的say()方法的。

如果你想实现父类的构造方法,然而你又想实现子类的构造方法,你可以这样子去做:

<?php

class chirld extends Father{

    public construct(){
        parent::construct();
        echo '我是子类的构造方法~';
    }
}

?>

这时候就会输出我是父类的构造方法!我是子类的构造方法~

假设你在子类中定义了这么一个方法:

protected function say($str = ''){
   echo '我是子类的say';
}

那么,你此时从父类继承下来的sys()方法将会被重写,所以调用后输出的结果就是:我是子类的say

如果你这样定义会怎样?

public function say($str = ''){
     echo '我是子类的方法哦~';
}

这样的写法还是可以的。PHP跟其他强类型语言不同的地方是,PHP重写方法允许你对重写的方法”向上公有化”,而不允许你”向下私有化”,就比如在这里你定义为private是肯定会报错的,而像C++这样语言确恰恰相反。

PHP的对于这种情况的思想就是,你父亲给了你受保护级别的遗产,此时在你手上是保护级别的,你父亲允许你对对别人分享,也就是public,但不允许你自己藏起来,也就是private,自己独吞肯定不行的。

此时你肯定会问,那么父类的say()设置为private会怎样?
结果不会怎样,就是父类已经私有化了,子类根本继承不到,所以你在子类中的say()方法随你这么定都可以。

还有一个问题,就是父类已经定义了sys()中带可选参数,那么,在子类中的你像下面这样无参数定义会怎样呢?

public function say(){
    echo '哈哈。我没有参数了耶~';
}

结果还是可以正常运行的,只不过会有 E_STRICT级的提示。原因在于PHP标准就是参数的数量必须跟父类对齐,当然,可以在php.ini中进行错误级别设置。

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

0

主题

20

帖子

7368

积分

钻石会员

Rank: 8Rank: 8

积分
7368
QQ
沙发
发表于 2022-9-6 17:20 来自手机 | 只看该作者
免费代码下载
回复

使用道具 举报

一起源码让程序更轻更快

www.171739.xyz

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表