抽象类

  1. 抽象类无法被实例化,它的作用是为所有继承自它的类定义(或部分实现)接口。
  2. 使用 abstract 关键字定义抽象类。
  3. 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下,一个抽象类至少包含一个抽象方法,抽象方法也是通过 abstract 关键字声明的。抽象方法只有方法声明,没有方法实现。不能编写方法体。
abstract class ShopProductWriter
{
protected $product = []; /**
* 抽象类中可以定义普通方法
*/
public function addProduct($shopProduct)
{
$this->product = $shopProduct;
} /**
* 定义一个抽象方法,只有方法声明,没有方法实现
*/
abstract public function write();
}
  1. 任何继承自抽象类的类都必须实现所有的抽象方法,否则它自己就必须被定义为抽象类。子类不能仅仅实现抽象方法,还必须遵守方法签名。这意味着实现方法的访问控制不能比抽象方法更严格。实现方法还需要有与抽象方法相同数量的参数,以及相同的类型提示。
class XmlProductWriter extends ShopProductWriter
{
/**
* 任何继承自抽象类的类都必须实现所有的抽象方法
*/
public function write()
{
echo 'XmlProductWriter';
}
}

接口

  1. 抽象类允许我们提供一些实现,但接口则是纯粹的模板。接口只定义功能,不能有实现。可以有属性和方法的声明,但不能有方法体
  2. 使用 interface 关键字声明接口。
interface Price
{
/**
* 只有方法声明,没有方法实现
*/
public function getPrice();
}
  1. 任何实现该接口的类都必须实现这个接口定义的所有方法,否则这个类就只能被声明为抽象类。
  2. 可以在类的声明中使用 implements 关键字让它实现接口。
class ShopProduct implements Price
{
protected $price; public function getPrice()
{
// TODO: Implement getPrice() method.
return $this->price;
}
}
  1. 一个实现类与它所实现的接口具有相同的类型。
  2. 一个类可以在继承一个父类的同时实现多个接口,implements 关键字后面跟着多个接口的名字,它们之间由逗号分隔开来。

PHP中抽象类和接口的区别的更多相关文章

  1. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  2. C#中抽象类和接口的区别

    原文:C#中抽象类和接口的区别 大家在编程时都容易把抽象类和接口搞混,下面为大家从概念上讲解抽象类和接口的区别: 一.抽象类: 含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是 ...

  3. 谈谈php中抽象类和接口的区别

    php中抽象类和接口的区别 1) 概念 面向对象的三大概念:封装,继承,多态 把属性和方法封装起来就是类.        一个类的属性和方法被另外的类复制就是继承,PHP里面的任何类都可以被继承,被继 ...

  4. PHP中抽象类与接口的区别

    PHP中抽象类与接口的区别 抽象类abstract 概念 定义为抽象的类不能被实例化.任何一个类,如果有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的类. 继承一个抽象类的时候,子类必须定义 ...

  5. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  6. C#中抽象类与接口的区别

    1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象 ...

  7. C#中抽象类和接口的区别(二)

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  8. C#中抽象类和接口的区别与使用

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  9. Java中抽象类和接口的区别?

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  10. java中抽象类、接口及区别

    转自:http://www.cnblogs.com/dolphin0520/p/3811437.html 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没 ...

随机推荐

  1. css三大特效之优先级

    1.什么是优先级作用:当多个选择器选中同一个标签,并且给同一个标签设置相同的属性时,如何层叠就由优先级来确定

  2. 01_Numpy基本使用

    1.Numpy读取txt/csv文件 读取数据 import numpy as np # numpy打开本地txt文件 world_alcohol = np.genfromtxt("D:\\ ...

  3. mysql的事物,外键,与常用引擎

    ### part1 时间类型 date YYYY-MM-DD 年月日 (出现日期) time HH:MM:SS 时分秒 (竞赛时间) year YYYY 年份值 (红酒年份 82年矿泉水) datet ...

  4. Git实战指南----跟着haibiscuit学Git(第五篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  5. .Net Core3.0 WEB API 中使用FluentValidation验证,实现批量注入

    为什么要使用FluentValidation 1.在日常的开发中,需要验证参数的合理性,不紧前端需要验证传毒的参数,后端也需要验证参数 2.在领域模型中也应该验证,做好防御性的编程是一种好的习惯(其实 ...

  6. IT网址 插件 系统 软件 网址收集!

    http://www.css88.com http://www.runoob.com/jquery/jquery-plugin-validate.html http://www.iteye.com/n ...

  7. Oracle SCN 详解

    一.简介 scn,system change number 在某个时间点定义数据库已提交版本的时间戳标记,Oracle为每个已提交事务分配一个唯一的scn,scn值是对数据库进行更改的逻辑时间点.sc ...

  8. python原类、类的创建过程与方法

    今天为大家介绍一下python中与class 相关的知识-- 获取对象的类名 python是一门面向对象的语言,对于一切接对象的python来说,咱们有必要深入的学习与了解一些知识 首先大家都知道,要 ...

  9. 华为云MySQL金融版正式商用,高可靠的金融级数据库来了

    摘要:全新三节点架构,基于深度优化的MGR组复制技术,提供金融级的数据一致性. 日前,华为云数据库MySQL 金融版正式商业化发布,MySQL金融版采用MGR技术,基于Paxos协议,采用一主两备三节 ...

  10. Cypher基本指令学习1

    1.查询节点 查询所有节点match (n) return n 查询带有标签的节点 match(movie:Flyer) return movie.name 查询关联节点(查询A导演的所有电影) ma ...