<?php//trait定义的特殊类可以实现多继承;但trait不是类,不能被实例化,只能做父类被继承// 多继承的优先级为子类方法的重写最优先,//继承trait的类比extends继承的类优先// 父类同名可以取别名traitBo{publicfunctionindex(){echo'菠萝赛东!';}}traitNpc{publicfunctionindex(){echo'Npcccccccc!';}publicfunctionmake(){echo__METHOD__;}}classWw{publicfunctionindex(){echo'弯弯弯弯弯!';}}//子类继承父类classNbextendsWw{//继承使用use;如果存在冲突可以使用取别名或者是指定使用哪一个方法, insteadofuseBo, Npc {//指定使用那个类的方法,这是是使用Npc类的index方法代替Bo类
Npc::index insteadof Bo;//给Bo类的index方法加别名
Bo::index as index2;}// public function index()// {// echo 'Nbbbbbb!';// }}//实例化子类$obj=newNb;$obj->index();$obj->make();$obj->index2();
防止父类方法被重写
<?php//在继承中防止父类方法被子类重写可以使用finalclassXun{publicfinalfunctionindex(){echo'我永远喜欢菠萝赛东';}}classYangextendsXun{// public function index()// {// echo '我用喜欢npc';// }}$obj=newYang;$obj->index();
类与接口
<?php//定义接口,该接口与抽象类一样,只是定义方法名称,不做方法实现,接口可以被多继承,但抽象类或者是类在php中只能链式继承或者说是单继承interfaceXun{functionindex();functionmake();}interfaceTest{functionindex();}classYangimplementsXun, Test
{privatepublicfunctionwen(){//echo 'woyongyuanxihuangboluosaidong';echo'555';}publicfunctionindex(){}publicfunctionmake(){}}$obj=newYang;// $obj->yang();
抽象类
<?php//定义抽象类,有抽象方法的类一定是抽象类,抽象类只定义不实现;当继承该类时需要实例化该方法;在php中类的继承是单继承的不能实现多继承,接口可以实现多继承或者说是多实现abstractclassXun{abstractfunctionindex();}// $obj = new Xun;// $obj->index();classYangextendsXun{publicfunctionindex(){}publicfunctionmake(){echo'我永远喜欢菠萝赛东';}}$obj=newYang;$obj->make();