PHP继承及实现
2016-07-18 14:08
671 查看
php学习已经有一段时间了,来对之前的知识积累做个记录。
php实现单继承和多实现。单继承:一个类只能有一个extends抽象类,多实现:一个类可以implements多个接口
举个简单的栗子(栗子可能举得不是很贴切,表达意思就行了):
下面这个抽象类:Person,表示一个人的共有属性性别sex,两个行为:抽象的干活doWhat(),以及工作work()
这个时候会发现,这个抽象类还少了一些必须的行为比如吃饭和睡觉。因此我们接着定义一个接口PersonAction
然后我们定义个学生来继承Person类和实现PersonAction接口
一个学生就跃然纸上了。
除了以上行为,Person还有一个独有的行为那就是思考,也是人类区别动物最大的不同点。因此我们又要声明一个思考的行为。
这样学生就可以开始做作业了。还有学生做作业的时候,如果遇到不会的,就会上网查资料,但是查资料这个动作又不是所有person都必须的。这个时候就可以使用trait
(trait的详细参见官网:http://php.net/manual/zh/language.oop5.traits.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.(比如学生上网查资料,来写作业,但是农业工作者就不一定会上网来种地了)
相关文章推荐
- phpize
- 富文本编辑器——关于PHP如何不断生成html页面并生成链接
- php学习之路
- #ThinkPHP_3.2.2模型# where查询条件汇总
- 110. PHP 读取 ini ,ftp 上传
- PHP文件夹文件拷贝/复制函数 dir_copy($src = '', $dst = '')
- 菜鸟初学-php对象的三大特性详解
- Glusterfs的Input/Output Error问题
- web03-OutputInfo
- PHP生成图像验证码的方法小结(2种方法)
- Yii2中DropDownList简单用法示例
- 使用matplotlib库绘图出现的问题
- Yii2使用dropdownlist实现地区三级联动功能的方法
- YII相关资料(干货)
- Yii2框架dropDownList下拉菜单用法实例分析
- php模拟请求(伪造来源和请求ip)
- 100行php代码实现加密端口转发
- 用HTML/JS/PHP方式实现页面延时跳转的简单实例
- PHP IDE phpstorm 常用快捷键
- PHP设计模式之——策略模式