本文实例讲述了PHP抽象类和接口用法。分享给大家供大家参考,具体如下:

前言

对于oop,估计大多数人并不陌生。有些人除PHP外也学习不少其他语言,会发现php的不同之处,可能语法极其丑陋,但并不妨碍它成为世界上最好的语言(邪教语言)。PHP可以允许常量作为接口的一部分,而对于抽象的理解十分重要。

计算机上,对抽象的理解与自然语言中我们每天使用的抽象概念有所不同。比如,我们指代‘狗'、‘猫'等动物,我们会说‘那只狗/猫',他们就是具有狗/猫这类特征的具体实例。但是我们不能把猫和狗看作一类,也就是说你不能说狗是猫,我们可以把狗和猫都定义到动物这一类。所以我们把抽象定义为一个对象的基本特征,使他与其他对象明确区分开。

抽象类

抽象类里面可以有非抽象方法。但接口里只能有抽象方法。 声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

先看一个普通类:

class appletree{

privated $catch;

piblic function tree($sweet){

$this->catch=$sweet;

return $this->catch;

}

$apple=new appletree();

$eat=$apple->tree('this apple is sweet');

echo $eat;

?>

再看一个抽象类:

//appletree.php:

abstract class appletree{

privated $catch;

abstract public function tree1($sweet);

public function tree2(){

echo'smell';

}

public function _construct(){

//......

}

}

?>

include_once('appletree.php');

class anothertree extends appletree{

public function tree1($sweet){

$this->catch='this apple is';

return $this->catch.$sweet;

}

}

$apple=new appletree();

echo $apple->tree1('sweet');

?>

从普通类和抽象类可以看出:

抽象类和抽象方法前面定义必须有abstract,调用为extends。抽象类中可以有具体方法,并且具体方法可以在抽象类中实例化,然而抽象方法不可以在抽象类中实例化。

接口

oop模式中接口也是比不可少的一部分,接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

具体例子如下:

//fruit.php

interface fruit{

public function apple($sweet);

public function orange();

}

?>

include_once('fruit.php');

class fruittree implements fruit{

privated $catch;

public function apple($sweet){

$this->catch='this fruit is';

rerurn $this->catch.$sweet;

}

public function orange(){

return 'this orange is sweet';

}

}

$tree=new fruittree();

echo $tree->apple('sweet');

echo $tree->orange();

?>

接口和常量

一个网上看到的例子:(接口名和常量之间要用间隔符‘::'隔开,接口中可以用静态常量,变量不可以)

interface TestInterface

{

const CONSTVAR = 'aaa';

static staticvar = 111;

public function alert($str);

}

class TestClass implements TestInterface

{

const CONSTVAR = 'bbb';

public function __CONSTRUCT()

{

echo TestInterface::CONSTVAR;

}

public function alert($str)

{

echo $str;

}

public function __DESTRUCT()

{

}

}

$test1 = new TestClass();

?>

我们可以看出接口和抽象类的区别:

1、接口中没有具体方法,都是抽象方法。

2、接口调用是implements,抽象类是extends。

3、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。

4、接口没有构造函数,抽象类可以有构造函数。

5、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。

6、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

使用选择

如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。

如果必须从多个来源继承行为,就使用接口。

如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

希望本文所述对大家PHP程序设计有所帮助。

php接口调用实例化,PHP抽象类和接口用法实例详解相关推荐

  1. php 调用微信收货地址,php微信自动获取收货地址api用法实例详解

    这篇文章主要介绍了php版微信自动获取收货地址api用法,结合实例形式分析了php版微信API接口调用与使用技巧,需要的朋友可以参考下 微信公众平台现在是越来越强大了,我们可以通过各种api接口来与平 ...

  2. java 定义抽象变量_Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都 ...

  3. Java11-day02【多态(成员访问、多态转型、内存图解)、抽象类(成员特点)、接口(成员特点)、类和接口的关系、抽象类和接口的区别、综合案例】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

  4. python rpc_对python调用RPC接口的实例详解

    要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: 需要安装的python包如下: 1.grpc安装 pip install grpcio 2.grpc的p ...

  5. Java接口调用的安全性_java编程接口调用安全性都有哪些要求

    接口调用是我们在使用java编程开发语言的时候会经常使用到的一个功能,而今天我们就通过案例分析来了解一下,java编程接口调用安全性都有哪些要求. 1.调用接口的先决条件-token 获取token一 ...

  6. (转)C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    原文链接:https://www.cnblogs.com/landeanfen/p/5501487.html 阅读目录 一.void无返回值 二.IHttpActionResult 1.Json(T ...

  7. 《HTML5网页开发实例详解》连载(四)HTML5中的FileSystem接口

    HTML 5除了提供用于获取文件信息的File对象外,还添加了FileSystem相关的应用接口.FileSystem对于不同的处理功能做了细致的分类,如用于文件读取和处理的FileReader和Fi ...

  8. java 接口函数_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

  9. java supplier接口_Java函数式接口Supplier接口实例详解

    这篇文章主要介绍了Java函数式接口Supplier接口实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 JDK提供了大量常用的函数式接口以丰 ...

最新文章

  1. javascript BOM对象详解
  2. ACL 2016 | CopyNet 和 Pointer Softmax
  3. 子网、超网和无类域间路由
  4. JavaWeb课程复习资料(二)——idea创建JDBC(FactoryDB)
  5. vue click同时传入事件对象和自定义参数
  6. 如何使用SAP Intelligent Robotic Process Automation自动操作Excel
  7. 【ArcGIS微课1000例】0007:基于数字高程模型DEM生成剖面线、剖面图
  8. 【BZOJ - 1059】矩阵游戏(二分图匹配,建图,最小边覆盖)
  9. javaweb简要介绍,虚拟路径,虚拟主机
  10. 与计算机相关的线性代数题,2007级计算机123班线性代数复习题及答案.doc
  11. circ2Traits:环状RNA相关疾病数据库
  12. C盘 html后缀 删,磁盘清理c盘的后果是什么?
  13. 树莓派开启SSH、VNC远程桌面、开启root账号以及换国内镜像源码等
  14. 解决win10下WIFI无法连接到网络
  15. 陶瓷电容器的结构(Ceramic Capacitor Structure)
  16. QQ群视频出现imsdk登录失败的解决方法
  17. 爬虫、网页分析解析辅助工具 Xpath-helper
  18. 从 0 搭建 Spring Cloud 服务,完整教程!
  19. 如何判断庄家出货(转贴)
  20. [网摘]深入浅出解读微软云计算:让云触手可及

热门文章

  1. 【图像处理opencv】_图像边缘
  2. QWT6.14的编译、配置、使用(Qt Creator5.14.2)
  3. win10,pip更新后,Spyder打不开
  4. python 获得github代码库列表
  5. 【ssh从零单排】eclipse和tomcat整合配置
  6. 调试应用不发愁,免安装的 curl 来帮忙
  7. Spark:一个高效的分布式计算系统--转
  8. reactor官方文档译文(1)Reactor简介
  9. 改变eclipse工程中代码的层次结构
  10. 大数据风控之信贷审查的5大步骤及要点