‘壹’ php中超类,父类,基类,派生类,抽象类,子类,继承类的区别另外还有些别的什么类它们还有那些别名
超类也就是父类,用来被继承的!
基类就是基础类
派生类也叫子类,俩是一回事!
抽象类是一个不完整的类,只能作为基类,主要是描述类的!里面只有方法体,没有实际操作方法!
你这都从来听来的乱七八糟的东西,估计你自己都要被这些搞的晕头转向!
‘贰’ 在php中,子类extends继承了父类,当子类和父类同时存在构造函数__construct先执行哪一个呢
1、如果父类和子类中都没有显式的定义__construct,在实例化子类对象时,只会隐含的调用子类自己的构造方法。
2、如果父类中有显式的构造方法__construct,而子类中没有定义__construct,在实例化子类对象时,就会调用父类中的构造方法。
3、如果父类和子类中都显式的定义了__construct,在实例化子类对象时,只会调用子类自己的构造方法(这就像是子类重构了父类的构造方法),而如果也想要调用父类的构造方法的话,就需要在子类的__construct 方法中显式的调用,(如 __construct(){ parent::_construct();})。
(2)php继承静态扩展阅读
子类的构造函数名与子类名相同。
在子类里父类的构造函数不会自动执行。
要在子类里执行父类的构造函数,必须执行类似以下语句:
$this->[父类的构造函数名()]
类的构造函数统一命名为__construct()。
子类的构造函数名也是__construct()(也是废话)。
在子类里父类的构造函数会不会执行,分两种情况:
1、如子类不定义构造函数 __construct(),则父类的构造函数默认会被继承下来,且会自动执行。
2、如子类定义了构造函数 __construct(),因为构造函数名也是__construct(),所以子类的构造函数实际上是覆盖(override)了父类的构造函数。这时执行的是该子类的构造函数。
这时如果要在子类里执行父类的构造函数,必须执行类似以下语句:parent::__construct();
‘叁’ php如何通过子类继承父类共有方法访问父类私有属性
在父类中加个public方法,
如private $aaa = 'test';
public function getAAA(){
return $this->aaa;
}
在子类中调用parent::getAAA();就可以获得父类私有属性
当然如果你想获取多个,可以改成动态变量名,
getAAA($v){
return $this->{$v};
}
‘肆’ php 继承时,方法可见性只能更高,即对于同一方法,父类为protected ,子类只能是protected 或者 public.
一个语言一种规矩,没必要较真去比较,如果都一样了,那就不是php了,php还是单继承呢,你怎么不去较真,php是5.0以后引用的面向对象,5.0之前照样能实现工作,你怎么不说java非要用面向对象去写呢,一个道理,别较真
‘伍’ 我所理解的 PHP Trait
PHP Trait是一种自PHP 5.4版本起引入的细粒度的代码复用工具。以下是关于PHP Trait的详细解释:
设计目的:
核心特性:
应用场景:
优势:
编码建议: