PHP中类的继承关系
2015-07-18 16:15
471 查看
在PHP中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就能得到相应的功能。假设大致有这么一个父类:
然后呢,搞一个子类去继承他:
此时你实例化子类,结果将会是
当然,因为
如果你想实现父类的构造方法,然而你又想实现子类的构造方法,你可以这样子去做:
这时候就会输出
假设你在子类中定义了这么一个方法:
那么,你此时从父类继承下来的
如果你这样定义会怎样?
这样的写法还是可以的。PHP跟其他强类型语言不同的地方是,PHP重写方法允许你对重写的方法”向上公有化”,而不允许你”向下私有化”,就比如在这里你定义为
PHP的对于这种情况的思想就是,你父亲给了你受保护级别的遗产,此时在你手上是保护级别的,你父亲允许你对对别人分享,也就是
此时你肯定会问,那么父类的
结果不会怎样,就是父类已经私有化了,子类根本继承不到,所以你在子类中的
还有一个问题,就是父类已经定义了
结果还是可以正常运行的,只不过会有
以上如果有什么错误的地方,还请及时纠正,谢谢。
1 <?php 2 class Father{ 3 4 public function __construct(){ 5 echo '我是父类的构造方法!'; 6 } 7 8 protected function say($str = 'Hello World!'){ 9 echo '说了一句话:' . $str; 10 } 11 } 12 ?>
然后呢,搞一个子类去继承他:
1 <?php 2 3 class chirld extends Father{ 4 5 public __construct(){ 6 echo '我是子类的构造方法~'; 7 } 8 }
此时你实例化子类,结果将会是
我是子类的构造方法~!
当然,因为
继承关系,所以子类是可以调用父类的
say()方法的。
如果你想实现父类的构造方法,然而你又想实现子类的构造方法,你可以这样子去做:
1 <?php 2 3 class chirld extends Father{ 4 5 public __construct(){ 6 parent::__construct(); 7 echo '我是子类的构造方法~'; 8 } 9 } 10 11 ?>
这时候就会输出
我是父类的构造方法!和
我是子类的构造方法~。
假设你在子类中定义了这么一个方法:
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中进行错误级别设置。
以上如果有什么错误的地方,还请及时纠正,谢谢。
相关文章推荐
- Strictftp关键字的作用
- tp实现贴脸灭屏
- zendCoding
- php技巧总结(待续)
- cpu hotplug的流程
- 强大的异步控制!!! eventproxy
- PHP使用正则表达式获取微博中的话题和对象名
- TextView 去掉自适应默认的fontpadding
- Yii 1.0 基础
- sphinx全文检索之PHP使用教程
- LNMP配置+yii环境
- PHP中如何判断数组是否为空
- Zend Server安装后首次运行就出现Internal Server Error的解决(转)
- thinkphp3.2 代码生成并点击验证码
- PHP获取指定月份第一天和最后一天的方法
- 炼数成金(原 itpub 培训)
- thinkphp的知识点
- PHP+MYSQL如何插入记录到数据库
- php 操作sphinx
- ThinkPHP 在模板里使用大U方…