php面向对象代码_PHP面向对象之抽象类详解(代码实例)
【摘要】
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。下面是PHP面向对象之抽象类详解(代码实例),让我们一起来看看PHP面向对象之抽象类详解(代码实例)的具体内容吧!
本文目标:
1、了解PHP中抽象类的定义
2、了解PHP中抽象类的作用
3、了解PHP中抽象类的使用场景
4、掌握PHP中抽象类的具体实现
还是按照之前一贯的思路,我们通过3W1H的方式进行学习,那么首先我们来了解一下
(一)、了解PHP中抽象类的定义(What)
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。
和接口的不同之处在于,接口中的方法都是不实现的,只是单纯的定义,但是抽象类中的方法是可以实现的。
(二)、了解PHP中抽象类的作用(Why)
在PHP中的类当中,有很多类会被不断的重写,这个时候我们可以使用抽象类,怎么做呢?就是先写一个公共的类,然后实例化之后我们可以重复去调用。这样可以提高代码的可重用性
(三)、了解PHP中抽象类的使用场景(Where)
1、如果发现代码中很多类都有相似或者共同的方法,我们可以把这些相同或者相似的方法抽离出来,封装到抽象类中。
抽象类和接口有点相似,可以这么说,接口是一个特殊的抽象类,只不过接口里面全都是抽象的方法,(所谓抽象就是没有具体的实现),但是抽象类中的部分方法,是可以具备实现的功能,
(四)、掌握PHP中抽象类的具体实现(How)
总结:
1、抽象类的定义通过abstract 定义,比如abstract class 类名{}
2、抽象类的方法的定义也是通过abstract定义,比如abstract public function 方法名(){}
3、抽象类是不能被实例化的
4、要继承一个抽象类,通过关键字extends
5、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法
6、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点
每个总结都是通过实践得出来的,现在我们用实践来演示总结,这样可以促进理解,让每个总结理解起来更加清晰,直观
(五)、具体代码
案例一、
实践目标:
1、抽象类的定义通过abstract 定义,比如abstract class 类名{}
2、抽象类的方法的定义也是通过abstract定义,比如abstract public function 方法名(){}
具体代码如下:<?php
abstract class Animal{
abstract public function eat();//抽象方法
//呼吸
public function breath(){
//所有动物的呼吸方法都是一样的,就不需要使用多态了
echo "呼吸
";
}
}
?>
案例二、
实践目标:
1、抽象类是不能被实例化的
具体代码如下:<?php
abstract class Animal{
abstract public function eat();//抽象方法
//呼吸
public function breath(){
//所有动物的呼吸方法都是一样的,就不需要使用多态了
echo "呼吸
";
}
}
$animal = new Animal();
?>
运行结果为:
Fatal error: Uncaught Error: Cannot instantiate abstract class Animal in D:\E-class\class-code\classing\index.php:10 Stack trace: #0 {main} thrown inD:\E-class\class-code\classing\index.phpon line10
案例四、
实践目标:
1、要继承一个抽象类,通过关键字extends
2、抽象类的子类必须要实现抽象类中未实现的所有方法,也就是说要重写抽象类中所有abstract的方法
具体代码如下:<?php
abstract class Animal{
abstract public function eat();//抽象方法
//呼吸
public function breath(){
//所有动物的呼吸方法都是一样的,就不需要使用多态了
echo "呼吸
";
}
}
//定义猴子
class Monkey extends Animal{
}
?>
如果Monkey类继承了抽象类,但不实现里面的abstract方法,那么运行结果为:
Fatal error: Class Monkey contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Animal::eat) inD:\E-class\class-code\classing\index.phpon line13
接下来我们来实现abstract方法
具体代码如下:<?php
abstract class Animal{
abstract public function eat();//抽象方法
//呼吸
public function breath(){
//所有动物的呼吸方法都是一样的,就不需要使用多态了
echo "呼吸
";
}
}
//定义猴子
class Monkey extends Animal{
//实现抽象类中的抽象方法
public function eat(){
echo "我是猴子类中的eat方法
";
}
}
$monkey = new Monkey();
$monkey->eat();
?>
运行结果如下:
我是猴子类中的eat方法
案例五、
实践目标:
1、抽象类的子类虽然没有实现抽象类中的已经实现的方法,一样可以调用这些方法,其实结合继承我们可以很好理解这点
具体代码如下:<?php
abstract class Animal{
abstract public function eat();//抽象方法
//呼吸
public function breath(){
//所有动物的呼吸方法都是一样的,就不需要使用多态了
echo "抽象类中的呼吸方法
";
}
}
//定义猴子
class Monkey extends Animal{
//实现抽象类中的抽象方法
public function eat(){
echo "我是猴子类中的eat
";
}
}
$monkey = new Monkey();
$monkey->eat();
$monkey->breath();
?>
运行结果如下:
我是猴子类中的eat抽象类中的呼吸方法
(六)、学以致用
问题:将以下真实场景,用抽象类还原出来
小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,抱起了小狗,最后,小芳和小狗亲了一口
思路分析:
1、对象分析:学生,小狗
2、对象属性分析:结合(现实世界+具体场景)
学生:名称
狗:名称
3、对象方法分析:结合(现实世界+具体场景)
学生:
(1)、放学
(2)、回到家中
(3)、走路
(4)、看
(5)、笑
(6)、抱东西
(7)、亲嘴
狗:
(1)、看
(2)、摇尾巴
(3)、亲嘴
4、我们发现这2个对象都有相似的方法,看,亲嘴,所以我们可以把它们封装到抽象类中,并且这2个方法不需要子类去重写,因为都是一样的
具体代码如下:<?php
abstract class Animal{
//看
public function look($obj){
//所有动物的呼吸方法都是一样的,就不需要使用多态了
echo "看见了".$obj->name."
";
}
//亲嘴
public function kiss($fromobj,$toobj){
echo $fromobj->name."亲了".$toobj->name."一口
";
}
}
//学生
class Student extends Animal{
public $name = "";
public function __construct( $name ){
$this->name = $name;
}
// 1、放学
public function offschool(){
echo $this->name."放学了
";
}
//回家
public function goHome(){
echo $this->name."回到家中
";
}
// 2、走路
public function walk(){
echo $this->name."走了过去
";
}
// 3、看
// 4、笑
public function smile(){
echo $this->name."微笑了
";
}
// 5、抱东西
public function hug($obj){
echo $this->name."抱起了".$obj->name."
";
}
// 6、亲嘴
}
//狗
class Dog extends Animal{
public $name = "";
public function __construct( $name ){
$this->name = $name;
}
//1、看
//2、摇尾巴
public function wagTail(){
echo $this->name."摇了尾巴
";
}
//3、亲嘴
}
//创建对象
$xf = new Student("小芳");
$dog = new Dog("小爱");
//小芳放学了
$xf->offschool();
//小芳放学回到家中,一进家门,只见心爱的小狗“小爱”马上就对主人摇起了尾巴,小芳笑了笑,走过去,
//抱起了小狗,最后,小芳和小狗亲了一口
//小芳回答家中
$xf->goHome();
//小芳看见小狗
$xf->look($dog);
//小狗摇尾巴
$dog->wagTail();
//小芳笑了笑
$xf->smile();
//小芳走过去
$xf->walk();
//抱起小狗
$xf->hug($dog);
//小芳亲了小狗
$xf->kiss($xf,$dog);
//小狗也亲了小芳
$dog->kiss($dog,$xf);
?>
运行结果为:
小芳放学了小芳回到家中看见了小爱小爱摇了尾巴小芳微笑了小芳走了过去小芳抱起了小爱小芳亲了小爱一口小爱亲了小芳一口
(七)、总结
1、本文主要讲解了PHP中抽象类的定义,作用以及具体的实现
希望本文能给大家带来一定的帮助,谢谢!!!
以上就是PHP面向对象之抽象类详解(代码实例)的内容,对PHP感兴趣的小伙伴们可以关注考必过,获取更多PHP前沿资讯和最新技术。最新消息小编会第一时间发布,助力大家考试,加油!
php面向对象代码_PHP面向对象之抽象类详解(代码实例)相关推荐
- java lock代码写法_java Lock接口详解及实例代码
java lock接口 java.util.concurrent.locks 接口lock public interface loce loce实现提供了比使用synchronized方法和语句可获 ...
- php获取数据3中方式,PHP面向对象之3种数据访问方式详解(代码实例)
PHP面向对象之3种数据访问方式详解(代码实例) 本文目标 掌握PHP中数据访问的3种方式的定义和作用 1.public 2.protected 3.private (一).数据访问的3种方式 1.P ...
- python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解
Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...
- java 面向对象三大特性之多态 万字详解(超详细)
目录 前言 : 一.为什么需要多态 : 1.白璧微瑕 : 2.举栗(请甘雨,刻晴,钟离吃饭): 3.代码 : 4.问题 : 二.什么是多态 : 1.定义 : 2.多态的实现步骤(重要) : 三.多态的 ...
- Java 线程池详解及实例代码
转载自 Java 线程池详解及实例代码 这篇文章主要介绍了Java 线程池的相关资料,并符实例代码,帮助大家学习参考,需要的朋友可以参考下 线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时 ...
- python的抽象类详解_第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类...
第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不是以继 ...
- python随机数程序源码_Python 实现随机数详解及实例代码
Python3实现随机数 random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.seed(x)改变随机数生成器的种子seed. 一般不必特别去设定seed,Pyth ...
- java super实例_java Super 用法详解及实例代码
java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...
- JavaScript 身份证号有效验证详解及实例代码
这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
最新文章
- 网页图表Highcharts实践教程之外层图表区
- 统计学习II.7 广义线性模型1 指数分布族
- eclipse lib中包不能打开_Eclipse环境搭建
- 测试微信小程序图片预览功能(因初步接触之了解到了不能使用本地图片,以下为公司产品图片)...
- 一日一技:Ocelot网关使用IdentityServer4认证
- Hive常见的属性配置
- python与室内设计_基于树莓派和Python的智能家居系统设计
- 将两个DataTable合并成一个DataTable
- vue 高德地图搜索功能_vue 调用高德地图API
- 最小 的浏览器 界面最精简 大小只有 压缩后只有7K 多
- 虚拟机VMware插入U盘操作系统崩溃死机问题及解决方法
- 联邦学习 OR 迁移学习?联邦迁移学习不香吗
- 生信分析矫正P值_万字长文+诚意满满 | 单细胞转录组分析最佳思路综述
- 上传gitlab ! [remote rejected] dev - dev (pre-receive hook declined)
- 推挽电路 MOS管、推挽输出和开漏输出
- (三)音视频:解析H264 SPS 更进一步理解H264
- VPN入门教程:基本概念、使用方法及思科模拟器实践
- TDengine与InfluxDB性能对比
- python turtle怎么画海绵宝宝_画师绘制海绵宝宝性转拟人,派大星变小帅哥,又脑补一出甜蜜大戏...
- visio2013每次打开都进行设置 解决办法
热门文章
- SAP Commerce的extensioninfo.xml
- 使用URL直接进入SAP CRM WebClient UI某个订单的明细页面
- this.byId(SupplierForm).bindElement in SAP UI5
- how does tomcat access js - SAPUI5 Core Libraries
- 观察者模式在SAP ui5修改theme实现中的应用
- 代码改动和配置文件相分离
- SAP UI5应用的sap-ui-core.js被加载之前,还有哪些js文件被加载了
- SAP UI5中的同步请求和异步请求
- 解决BDOC structure里header和data structure里数据格式不一致的问题
- 我在德国做SAP CRM One Order redesign工作的心得