PHP继承及实现
php学习已经有一段时间了,来对之前的知识积累做个记录。
php实现单继承和多实现。单继承: 一个类只能有一个extends 抽象类 ,多实现 :一个类可以implements 多个接口
举个简单的栗子(栗子可能举得不是很贴切,表达意思就行了):
下面这个抽象类:Person,表示一个人的共有属性 性别sex,两个行为:抽象的干活doWhat(),以及工作work()
public abstract class Person{ private $sex; public function getSex(){ return $this->sex; } public function setSex($value){ $this->sex=$value; } abstract function doWhat(); protected function work(){ echo '我在工作!'; } }
这个时候会发现,这个抽象类还少了一些必须的行为比如 吃饭 和睡觉。因此我们接着定义一个接口PersonAction
public interface PersonAction{ public function eat(); public function sleep(); }
然后我们定义个学生来继承 Person 类 和 实现 PersonAction接口
public class student1 extends Person implements PersonAction{ private $school; public function setSchool($value){ $this->school=$value; } public function getSchool(){ return $this->school; } public function doWhat() { echo '我去上学'; } public function eat() { echo '在学校吃饭'; } public function sleep() { echo '晚上睡觉'; } }
一个学生就跃然纸上了。
除了以上行为,Person还有一个独有的行为那就是思考,也是人类区别动物最大的不同点。因此 我们又要声明一个思考的行为。
interface PersonThink{ public function thinklife(); //思考人生 }
ok,那么学生就变成了:
public class student1 extends Person implements PersonAction,PersonThink{ private $school; public function setSchool($value){ $this->school=$value; } public function getSchool(){ return $this->school; } public function doWhat() { echo '我去上学'; } public function eat() { echo '在学校吃饭'; } public function sleep() { echo '晚上睡觉'; } public function thinklife() { echo '我在想作业'; } }
这样学生就可以开始做作业了。还有学生做作业的时候,如果遇到不会的,就会上网查资料,但是查资料这个动作又不是所有person都必须的。这个时候就可以使用trait
(trait 的详细参见官网:http://php.net/manual/zh/language.oop5.traits.php)
trait StudentHelp{ public function searchIntnet(){ echo '上网查资料'; } }
这个时候学生就可以上网查资料了
public class student1 extends Person implements PersonAction,PersonThink{ use StudentHelp; private $school; public function setSchool($value){ $this->school=$value; } public function getSchool(){ return $this->school; } …… public function thinklife() { $this->searchIntnet(); echo '我在想作业'; } }
这个时候学生就可以上网查资料来写作业啦。
由上面几个例子我们可以看到,php只能做到单继承和多实现,interface 一般定义必须行为,abstarct 一般定义对象的公用属性和行为。但往往具有一般通用性的行为建议使用trait. (比如学生上网查资料,来写作业,但是农业工作者就不一定会上网来种地了)
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下右下角的【关注 LeLe.Xu】。
因为,我的写作热情也离不开您的肯定支持。
感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是LeLe.Xu 。