在PHP中我们声明类一般都用class来声明。

<?php
class Student{  //用class声明一个Student类 function __construct(){ //实例化类的时候自动加载的构造方法__construct() } public function index(){ //成员方法 } abstract function fun1(); //抽象方法fun1,使用 abstract 关键字来修饰 abstract function fun2(); //抽象方法fun2 }
?>
  •   下面来说一下一个最简单的继承
<?php
class Student extends Person{ //使用 class 来声明一个Student类,并用 extends 来继承 Person类 function __construct(){ //实例化类的时候自动加载的构造方法__construct()
parent::__construct(); //继承父类,继承父类要在子类中的构造方法中最开始就使用 parent::__construct(); 来继承。
} public function index(){ //成员方法 } abstract function fun1(); //抽象方法fun1,使用 abstract 关键字来修饰 abstract function fun2(); //抽象方法fun2 }
?>
  •   再说一个抽象类
    •   抽象类也要使用“abstract”关键字来修饰;在抽象类里面可以有不是抽象的方法和成员属性,但只要有一个方法是抽象的方法,这个类就必须声明为抽象类,使用“abstract”来修饰。
<?php
abstract class Demo{
var $test;
abstract function fun1();
abstract function fun2();
function fun3(){ }
} $demo=new Demo(); //抽象类为能产生实例对象,所以这样做是错的,实例化对象交给子类
class Test extends Demo{
function fun1(){ }
function fun2(){ }
}
$test=new Test(); //子类可以实例化对象,因为实现了父类中所有抽象方法
?>
  •   PHP 与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类.为了解决这个问题,PHP 引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法。接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口也是一种特殊的类,为什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是抽象方法,那么我们就换一种声明方法使用“接口”;也就是说接口里面所有的方法必须都是声明为抽象方法,另外接口里面不能声明变量,而且接口里面所有的成员都是public 权限的。所以子类在实现的时候也一定要使用public 权限实限。
  • 声明一个类的时候我们使用的关键字是“class”,而接口一种特殊的类,使用的关键字是“interface”;

    类的定义:class 类名{ … },接口的声明:interface 接口名{ … }

<?php
//定义一个接口使用interface 关键字,“One”为接口名称
interface One{
//定义一个常量
const constant = 'constant value';
//定义了一个抽象方法”fun1”
public function fun1();
//定义了抽象方法”fun2”
public function fun2();
}
?>
  •   使用“extends”关键字让一个接口去继承另一个接口;
<?php
//使用”extends”继承另外一个接口
interface Two extends One{
function fun3();
function fun4();
}
?>
  •   定义一个接口的子类去实现接口中全部抽象方法使用的关键字是“implements”,而不是我们前面所说的“extends”
<?php
//使用“implements”这个关键字去实现接口中的抽象方法
class Three implements One{
function fun1(){ }
function fun2(){ }
}
//实现了全部方法,我们去可以使用子类去实例化对象了
$three=new Three();
?>
  •   实现多个接口
<?php
//使用implements实现多个接口
class Four implemtns 接口一, 接口二, … .{
//必须把所有接口中的方法都要实现才可以实例化对象。
}
?>
  •   不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口;
<?php
//使用extends 继承一个类,使用implements 实现多个接口
class Four extends 类名一implemtns 接口一, 接口二, … .{
//所有接口中的方法都要实现才可以实例化对象
… … … ..
}
?>

  

PHP5接口技术入门的更多相关文章

  1. 【PHP面向对象(OOP)编程入门教程】20.PHP5接口技术(interface)

    PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类.为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法.接口是一种特殊的抽象 ...

  2. PHP面向对象(OOP):PHP5接口技术(interface)

    PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类.为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法.接口是一种特殊的抽象 ...

  3. 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

    [Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...

  4. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  5. 《SaltStack技术入门与实践》—— Event和Reactor系统

    Event和Reactor系统 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Event是SaltStack里面的对每个事件的一个记录,它相比job ...

  6. 《SaltStack技术入门与实践》——执行结果处理

    执行结果处理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Return组件可以理解为SaltStack系统对执行Minion返回后的数据进行存储或 ...

  7. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】

    最近对docker这个比较感兴趣,找一个比较完整的书籍看看,在z.cn上找到了电子书,jd dangdang看来要加油啊 Docker技术入门与实战 [Kindle电子书] ~ 杨保华 戴王剑 曹亚仑 ...

  8. 【Zigbee技术入门教程-02】一图读懂ZStack协议栈的基本架构和工作机理

    [Zigbee技术入门教程-02]一图读懂ZStack协议栈的基本架构和工作机理 广东职业技术学院  欧浩源  ohy3686@foxmail.com Z-Stack协议栈是一个基于任务轮询方式的操作 ...

  9. 【Zigbee技术入门教程-号外】基于Z-Stack协议栈的抢答系统

    [Zigbee技术入门教程-号外]基于Z-Stack协议栈的抢答系统 广东职业技术学院  欧浩源 一.引言    2017年全国职业院校技能大赛"物联网技术应用"赛项中任务三题2的 ...

随机推荐

  1. Windows Server 2008 R2远程桌面服务安装配置和授权激活

    1.安装 2.远程桌面授权激活 2.1 管理工具——远程桌面服务——(远程桌面授权管理)RD授权管理器: 2.2 由于RD授权服务器还未激活,所以授权服务器图标右下角显示红色×号: 点服务器展开——右 ...

  2. 吴裕雄 python 机器学习——集成学习AdaBoost算法回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  3. 吴裕雄 python 机器学习——人工神经网络感知机学习算法的应用

    import numpy as np from matplotlib import pyplot as plt from sklearn import neighbors, datasets from ...

  4. bodyParser.urlencoded({ })里extended: true和false区别???

  5. Go_runtime包

    package main import ( "fmt" "runtime" "time" ) //写在init函数里,main函数运行之前就 ...

  6. samba文件共享及账户映射

    samba文件共享及账户映射 实验介绍:在虚拟机Linux系统上安装sanmba服务,并在另外一台虚拟机的win7系统上访问共享文件夹,主要分为:匿名访问.身份验证访问.以及添加白名单和为了保护服务器 ...

  7. oracle中以dba_、user_、v$_、all_、session_、index_开头

    原 oracle中以dba_.user_.v$_.all_.session_.index_开头 2011年07月05日 11:26:06 clbxp 阅读数:3279   oracle中以dba_.u ...

  8. CSS 动画过程及间接实现样式延时

    /* 过度动画自动归位 */ @keyframes animation_button_scene { 0% { background: #9cacb4; } 10% { /* 样式过度2 */ } 6 ...

  9. 学习笔记(21)- texar 文本生成

    今天试了文本生成框架texar https://github.com/asyml/texar 这个texar框架里面,也有端到端的实现 pwd /Users/huihui/git/ git clone ...

  10. 【C语言】创建一个函数,判断某一正整数是否为水仙花数,并调用这个函数找出1000以内所有水仙花数

    #include <stdio.h> int fun(int x) { int a, b, c; a = x / ; b = x % / ; c = x % ; if (x == a * ...