在php中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就能得到相应的功能。假设大致有这么一个父类:
1 <?<span>php
2 class<span> Father{
3
4 public function<span> __construct(){
5 echo '我是父类的构造方法!'<span>;
6 <span> }
7
8 protected function say($str = 'Hello World!'<span>){
9 echo '说了一句话:' . $str<span>;
10 <span> }
11 <span>}
12 ?></span></span></span></span></span></span></span></span></span>然后呢,搞一个子类去继承他:
1 <?<span>php
2
3 class chirld extends<span> Father{
4
5 public<span> __construct(){
6 echo '我是子类的构造方法~'<span>;
7 <span> }
8 }</span></span></span></span></span>此时你实例化子类,结果将会是我是子类的构造方法~!
当然,因为继承关系,所以子类是可以调用父类的say()方法的。
如果你想实现父类的构造方法,然而你又想实现子类的构造方法,你可以这样子去做:
1 <?<span>php
2
3 class chirld extends<span> Father{
4
5 public<span> __construct(){
6 parent::<span>__construct();
7 echo '我是子类的构造方法~'<span>;
8 <span> }
9 <span>}
10
11 ?></span></span></span></span></span></span></span>这时候就会输出我是父类的构造方法!和我是子类的构造方法~。
立即学习“PHP免费学习笔记(深入)”;
假设你在子类中定义了这么一个方法:
1 protected function say($str = ''<span>){
2 echo '我是子类的say'<span>;
3 }</span></span>那么,你此时从父类继承下来的sys()方法将会被重写,所以调用后输出的结果就是:我是子类的say。
如果你这样定义会怎样?
1 public function say($str = ''<span>){
2 echo '我是子类的方法哦~'<span>;
3 }</span></span>这样的写法还是可以的。PHP跟其他强类型语言不同的地方是,PHP重写方法允许你对重写的方法”向上公有化”,而不允许你”向下私有化”,就比如在这里你定义为private是肯定会报错的,而像C++这样语言确恰恰相反。
PHP的对于这种情况的思想就是,你父亲给了你受保护级别的遗产,此时在你手上是保护级别的,你父亲允许你对对别人分享,也就是public,但不允许你自己藏起来,也就是private,自己独吞肯定不行的。
此时你肯定会问,那么父类的say()设置为private会怎样?
结果不会怎样,就是父类已经私有化了,子类根本继承不到,所以你在子类中的say()方法随你这么定都可以。
还有一个问题,就是父类已经定义了sys()中带可选参数,那么,在子类中的你像下面这样无参数定义会怎样呢?
public function<span> say(){
echo '哈哈。我没有参数了耶~'<span>;
}</span></span>结果还是可以正常运行的,只不过会有 E_STRICT级的提示。原因在于PHP标准就是参数的数量必须跟父类对齐,当然,可以在php.ini中进行错误级别设置。
以上如果有什么错误的地方,还请及时纠正,谢谢。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号