您的位置:首页 > 编程语言 > PHP开发

PHP继承及实现

2016-07-18 14:08 671 查看
php学习已经有一段时间了,来对之前的知识积累做个记录。

php实现单继承和多实现。单继承:一个类只能有一个extends抽象类,多实现:一个类可以implements多个接口

举个简单的栗子(栗子可能举得不是很贴切,表达意思就行了):

下面这个抽象类:Person,表示一个人的共有属性性别sex,两个行为:抽象的干活doWhat(),以及工作work()



publicabstractclassPerson{

private$sex;

publicfunctiongetSex(){

return$this->sex;

}

publicfunctionsetSex($value){

$this->sex=$value;

}

abstractfunctiondoWhat();

protectedfunctionwork(){

echo'我在工作!';

}

}


这个时候会发现,这个抽象类还少了一些必须的行为比如吃饭和睡觉。因此我们接着定义一个接口PersonAction



publicinterfacePersonAction{

publicfunctioneat();

publicfunctionsleep();

}


然后我们定义个学生来继承Person类和实现PersonAction接口



publicclassstudent1extendsPersonimplementsPersonAction{

private$school;

publicfunctionsetSchool($value){

$this->school=$value;

}

publicfunctiongetSchool(){

return$this->school;

}

publicfunctiondoWhat()

{

echo'我去上学';

}

publicfunctioneat()

{

echo'在学校吃饭';

}

publicfunctionsleep()

{

echo'晚上睡觉';

}

}


一个学生就跃然纸上了。

除了以上行为,Person还有一个独有的行为那就是思考,也是人类区别动物最大的不同点。因此我们又要声明一个思考的行为。

interfacePersonThink{

publicfunctionthinklife();//思考人生

}



ok,那么学生就变成了:


publicclassstudent1extendsPersonimplementsPersonAction,PersonThink{

private$school;

publicfunctionsetSchool($value){

$this->school=$value;

}

publicfunctiongetSchool(){

return$this->school;

}

publicfunctiondoWhat()

{

echo'我去上学';

}

publicfunctioneat()

{

echo'在学校吃饭';

}

publicfunctionsleep()

{

echo'晚上睡觉';

}

publicfunctionthinklife()

{

echo'我在想作业';

}

}


这样学生就可以开始做作业了。还有学生做作业的时候,如果遇到不会的,就会上网查资料,但是查资料这个动作又不是所有person都必须的。这个时候就可以使用trait

(trait的详细参见官网:http://php.net/manual/zh/language.oop5.traits.php)




traitStudentHelp{

publicfunctionsearchIntnet(){

echo'上网查资料';

}

}


这个时候学生就可以上网查资料了

publicclassstudent1extendsPersonimplementsPersonAction,PersonThink{

useStudentHelp;

private$school;

publicfunctionsetSchool($value){

$this->school=$value;

}

publicfunctiongetSchool(){

return$this->school;

}

……

publicfunctionthinklife()

{

$this->searchIntnet();

echo'我在想作业';

}

}


这个时候学生就可以上网查资料来写作业啦。


由上面几个例子我们可以看到,php只能做到单继承和多实现,interface一般定义必须行为,abstarct一般定义对象的公用属性和行为。但往往具有一般通用性的行为建议使用trait.(比如学生上网查资料,来写作业,但是农业工作者就不一定会上网来种地了)






                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: