博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中类的继承关系
阅读量:7232 次
发布时间:2019-06-29

本文共 951 字,大约阅读时间需要 3 分钟。

原文:

在PHP中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就能得到相应的功能。假设大致有这么一个父类:

1 

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

1 

此时你实例化子类,结果将会是我是子类的构造方法~! 

当然,因为继承关系,所以子类是可以调用父类的say()方法的。

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

1 

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

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

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

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

如果你这样定义会怎样?

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

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

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

此时你肯定会问,那么父类的say()设置为private会怎样? 

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

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

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

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

 

以上如果有什么错误的地方,还请及时纠正,谢谢。

转载地址:http://rzpfm.baihongyu.com/

你可能感兴趣的文章
错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
查看>>
Linux 权限基础说明
查看>>
2017级面向对象程序设计寒假作业3
查看>>
迭代器
查看>>
Linux OpenCV 静态链接错误
查看>>
Java多线程&集合类-详细版
查看>>
Flask即插视图与tornado比较
查看>>
springboot笔记(一)
查看>>
学习 - SpringMVC
查看>>
logic标签用法
查看>>
MFC中自定义消息
查看>>
hdu 5258 wyh2000 and pupil(dfs)
查看>>
新安装的ubuntu编辑器问题
查看>>
SOJ - 11598
查看>>
[WC2005]双面棋盘(并查集+分治)
查看>>
C#中利用WebBrowser控件,获得HTML源码
查看>>
Android中通过反射获取资源Id
查看>>
Ubuntu Desktop基本办公环境搭建
查看>>
opensuse 13.1 中如何使用yong中文输入法
查看>>
c++堆栈区别
查看>>