深入解读php中关于抽象(abstract)类和抽象方法的问题分析


Posted in PHP onJanuary 03, 2014

在面向对象(OOP)语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问的接口。而抽象方法就是为了方便继承而引入的,现在来看一下抽象类和抽象方法分别是如何定义以及他们的特点。

什么是抽象方法?我们在类里面定义的只有方法名没有方法体的方法就是抽象方法,所谓没有方法体就是在方法声明的时候没有大括号以及其中的内容,而是直接声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键字"abstract"来修饰。

1、抽象关键字 :abstract

抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象类或者方法我们需要使用adstract关键字。

2、抽象方法和抽象类的定义

一个类中至少有一个方法是抽象的,我们称之为抽象类。所以如果定义抽象类首先定义抽象方法。

abstract class class1{                                             
   abstract function fun1(); 
……
}

1、类中至少有一个抽象方法
2、抽象方法不允许有{ }
3、抽象方法前面必须要加abstract

3、抽象类和方法使用规则

抽象类的几个特点:

1、不能被实例化,只能被继承

2、继承的派生类当中要把所有抽象方法重载才能实例化

 

关于抽象方法的声明如下:

<?php
abstract function fun1();
?>

什么是抽象类呢?只要一个类里面有一个方法是抽象方法,那么这个类就必须定义为抽象类。抽象类也要使用关键字"abstract"来修饰,抽象类不能实例化对象,所以抽象方法作为子类方法重载的模板使用的,且要把继承的抽象类里的方法都实现。

关于抽象类以及抽象类的实现举例如下:

<?php
abstract class User{  //定义抽象类
    abstract protected function getUser(); //定义抽象方法
    public function print_content(){
        print $this->getUser();
    }
}
class vipUser extends User{
    protected function getUser(){
        return "抽象类与抽象方法3water.com";
    }
}
$user=new vipUser(); //实例化子类
$user->print_content(); //抽象类与抽象方法
?>

注意:抽象类继承另外一个抽象类时(目的是对该抽象类的扩展),不能重写父类的抽象方法。

在PHP5.1中,抽象类中支持静态抽象方法。下面这个例子,看到静态抽象方法可以声明。实现这个方法时,必须是静态的方法。

<?php
abstract class User{
 protected static  $sal=0;
 static abstract function getSal();
 static abstract function setSal($sal); 
}
class VipUser extends User{
 static function getSal(){
  return self::$sal;
 }
 static function setSal($sal){
  self::$sal=$sal;
 }
}
VipUser::setSal(100);
echo "you sal is 3water.com " . VipUser::getSal();
?>
PHP 相关文章推荐
PHP程序员编程注意事项
Apr 10 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
php分页示例分享
Apr 30 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
Oct 21 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 #PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 #PHP
php curl模拟post提交数据示例
Dec 31 #PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 #PHP
PHP字符串的连接的简单实例
Dec 30 #PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 #PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 #PHP
You might like
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
python实现烟花小程序
2019/01/30 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
如何基于线程池提升request模块效率
2020/04/18 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
工商管理专业应届生求职信
2013/11/04 职场文书
团队经理竞聘书
2014/03/31 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2015年药房工作总结
2015/04/25 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android