侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

一文搞懂PHP类和对象、抽象类、接口

php  /  管理员 发布于 7年前   266

类和对象:抽象类、接口

抽象类和接口:抽象类(Abstract Class)与接口(Interface)都是不能被实例化的特殊类。

抽象类:

抽象类里的抽象方法都是没有具体实现的空方法。抽象类可以用来为子类设置功能定义,所以抽象类强制开发人员只能从特定的父类

来继承,然后在继承的子类中完成所需的具体功能。

定义抽象类的语法格式如下:

abstract class 类名称{  //抽象类的成员变量列表  abstract function 成员方法1([参数1],[参数2],……);  abstract function 成员方法2([参数1],[参数2],……);  //其他代码}

抽象类与普通类相似,也具有成员属性和成员方法,区别在于抽象类不能被实例化。

下面定义一个简单、完整的抽象类:

abstract class MyClass{ //定义抽象类  abstract protected function myFunction($arg); //定义抽象方法}

PS:在抽象类的定义中必须至少含有一个使用关键字abstract修饰并且没有任何实现的抽象方法。

抽象类的实现过程:

在抽象类中,不仅可以定义抽象方法,还可以像普通类一样,定义一些能够完成指定功能的成员方法,当子类继承抽象类后,就可以

直接引用这些能够完成指定功能的成员方法。

class 子类名称 extends 抽象类名称{  //子类的成员变量列表    function 抽象方法名称([参数1],[参数2],……){      //抽象方法的具体实现  }  //其他代码 }

PS:当某个类要继承于抽象类时,必须包含该抽象类中定义的所有方法,否则在运行的时候出错。

下面是一个实现抽象类的例子:

abstract class Study{  abstract function printStudy($name,$lang); //定义一个抽象方法} class OneStudy extends Study { //定义子类继承于父类  function printStudy($name,$lang){ //抽象方法的具体实现      echo $name."正在整理".$lang."……";  } } class TwoStudy extends Study {  function printStudy($name,$lang){      echo $name."正在整理".$lang."……";    }}  $first=new OneStudy();  $first->printStudy("大兵","PHP基础知识");  echo "";  $second=new TwoStudy();  $second->printStudy("小兵","SEO基础知识");

该程序运行结果为:

大兵正在整理PHP基础知识……

小兵正在整理SEO基础知识……

定义接口:

接口是一组成员方法声明的集合,它只包含一些空的成员方法或者一些类常量,这些空的成员方法将由实现该接口的类去具体实现。

定义接口需要使用关键字 interface, 语法格式如下:

interface 接口名称{  //类常量列表  function 成员方法1([参数1],[参数2],……);  function 成员方法2([参数1],[参数2],……);  //其他代码}

由于接口不能被实例化,所以接口不存在构造方法和折构方法,它只需要给出一组要实现的成员方法的声明即可。

下面定义一个简单、完整的接口:

interface class MyClass{ //定义接口  public function myFunction($arg); //定义方法}

接口的实现过程:

与类相似,接口也可以继承。接口可以继承多个接口,但是接口不能继承类。实现接口要使用关键字 implements.

在使用类来实现一个接口时,必须至少包含接口中定义的所有方法,否则在运行时出错。

下面是一个实现接口的例子: 

interface IName{ //定义接口IName  function setName($name);  function getName();  }  interface IAge{ //定义接口IAge  function setAge($age);  function getAge();  }  class DaBing implements IName,IAge{ //定义实现接口的类  private $name;  private $age;  function setName($name){  $this->name=$name;  }  function getName(){  echo "姓名:".$this->name." ";  }  function setAge($age){  $this->age=$age;  }  function getAge(){  echo "年龄:".$this->age;  }  }  $obj=new DaBing();  $obj->setName("大兵");  $obj->getName();  $obj->setAge(25);  $obj->getAge();

该程序运行结果为:

姓名:大兵 年龄:25

抽象类与接口的区别:

对接口的使用是通过关键字 implements 来实现的。对抽象类的操作是通过继承关键字 extends 来实现的。

接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封闭。

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

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

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

在接口中不可以有成员方法的实现代码,在抽象类中可以有成员方法的实现代码。

PS:在应用中,如果需要给某一个类添加更多的行为,这时可以定义一个接口把这些行为组合在一起。如果需要对某一个事物的数据和行为进行重用,应该定义一个抽象类封装这些变量和函数。


以上就是一文搞懂PHP类和对象、抽象类、接口的详细内容,更多请关注其它相关文章!


  • 上一条:
    分享学好PHP的几个重要心得
    下一条:
    实例详解php cookie与session会话基本用法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客