PHP中类的继承关系
在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中进行错误级别设置。
以上假设有什么错误的地方,还请及时纠正。谢谢。