深入解读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学习之PHP变量
Oct 09 PHP
在VS2008中编译MYSQL5.1.48的方法
Jul 03 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
php实现仿写CodeIgniter的购物车类
Jul 29 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
如何使用php等比例缩放图片
Oct 12 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 PHP
Laravel Reponse响应客户端示例详解
Sep 03 PHP
PHP 裁剪图片
Mar 09 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 has encountered an Access Violation
2007/01/15 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
session 加入redis的实现代码
2016/07/15 PHP
js计数器代码
2006/11/04 Javascript
javascript web对话框与弹出窗口
2009/02/22 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
jQuery分组选择器简单用法示例
2019/04/04 jQuery
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python将ip地址转换成整数的方法
2015/03/17 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
python一键升级所有pip package的方法
2017/01/16 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
学python安装的软件总结
2019/10/12 Python
python next()和iter()函数原理解析
2020/02/07 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
酒店管理毕业生自荐信
2013/10/24 职场文书
求职自荐信格式
2013/12/04 职场文书
安全生产年活动总结
2014/08/29 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
2015年药房工作总结
2015/04/25 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android