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. (比如学生上网查资料,来写作业,但是农业工作者就不一定会上网来种地了)
PHP继承及实现的更多相关文章
- javaScript的原型继承与多态性
1.prototype 我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉 ...
- JavaScript的继承实现方式
1.使用call或apply方法,将父对象的构造函数绑定在子对象上 function A(){ this.name = 'json'; } function B(){ A.call(this); } ...
- javascript中的继承与深度拷贝
前言 本篇适合前端新人,下面开始...... 对于前端新手来说(比如博主),每当对js的对象做操作时,都是一种痛苦,原因就是在于对象的赋值是引用的传递,并非值的传递,虽然看上去后者赋值给了前者,他们就 ...
- 谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...
- JS继承类相关试题
题目一: //有关于原型继承的代码如下:function Person(name) { this.name = name;}Person.prototype = { getName : f ...
- JS继承之寄生类继承
原型式继承 其原理就是借助原型,可以基于已有的对象创建新对象.节省了创建自定义类型这一步(虽然觉得这样没什么意义). 模型 function object(o){ function W(){ } W. ...
- JS继承之借用构造函数继承和组合继承
根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...
- JS继承之原型继承
许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承.ECMAScript只支 ...
- 深入浅出JavaScript之原型链&继承
Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...
- 如果你也会C#,那不妨了解下F#(7):面向对象编程之继承、接口和泛型
前言 面向对象三大基本特性:封装.继承.多态.上一篇中介绍了类的定义,下面就了解下F#中继承和多态的使用吧.
随机推荐
- [Web 前端] 014 css 盒子模型
1. 简介 元素在页面中显示成一个方块,类似一个盒子 把元素叫做盒子,设置对应的样式分别为 盒子的边框(border) 盒子内的内容和边框之间的间距(padding) 盒子与盒子之间的间距(margi ...
- win10系统Docker和VMware WorkStation共存,远程工具连接Docker
摘要:win10安装docker进行学习的两种途径: Docker for Windows Installer.exe(地址https://download.docker.com/win/stable ...
- JavaBean简介和要求
JavaBean是一种Java语言写成的可重用组件. 所谓javaBean,是指符合如下标准的Java类: 类是公共的 有一个无参的公共的构造器 有属性,且有对应的get.set方法 用户可以使用Ja ...
- 2018 我要告诉你的 Vue 知识大全
Vue ,React ,Angular 三大主流框架,最后我选择学习 Vue ,接触过 React ,自己感觉学习曲线有些陡峭,进而我选择了学习 Vue ,他的学习曲线平稳很多:不管选择什么框架,除了 ...
- host文件无操作权限
把先用其它启动方式启动电脑,如winpe(网上有制作方法,很简单的),启动后找到FWPKCLNT.SYS所在文件夹, 一般在c/windows/system32/drivers,将drivers文件夹 ...
- (四:NIO系列) Java NIO Selector
出处:Java NIO Selector 1.1. Selector入门 1.1.1. Selector的和Channel的关系 Java NIO的核心组件包括: (1)Channel(通道) (2) ...
- controller函数中参数列表使用多个@RequestBody
首先出现这种情况是因为有下面这种需求 $.ajax({ type: "POST", url: "${pageContext.request.contextPath}/co ...
- Win10系统下插入耳机前面板无声后面板有声的处理
问题描述: 当耳机插入后面板绿色口(注意:耳机扬声器为绿色口,红色为话筒麦克风:前后面板一样):可以听到声音,但是转到前面板插入后,无声音:调出声音面板发现声音可随音度波动 处理步骤: 1.保证插牢接 ...
- 【知识强化】第七章 输入/输出系统 7.1 I/O系统基本概念
那么下面,我们将要进入计算机组成原理的最后一章,也就是我们的第七章,输入输出系统的学习.那么这一部分内容呢,我们之前呢一直在提,但是并没有详细地讲解,那么进入到我们第七章输入输出系统这一部分,我们就要 ...
- 3-基于双TMS320C6678+双XC6VSX315T的6U VPX高速数据处理平台
基于双TMS320C6678+双XC6VSX315T的6U VPX高速数据处理平台 一.板卡概述 板卡由我公司自主研发,基于VPX架构,主体芯片为两片 TI DSP TMS320C6678,两片V ...