深入解读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 VS ASP
Oct 09 PHP
ThinkPHP php 框架学习笔记
Oct 30 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php实现递归的三种基本方式
Jul 04 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
Smarty保留变量用法分析
May 23 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP将数据导出Excel表中的实例(投机型)
Jul 31 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日历类分享
2014/11/18 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
php session 写入数据库
2016/02/13 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jQuery Easyui加载表格出错时在表格中间显示自定义的提示内容
2016/12/08 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
[54:51]Ti4 冒泡赛第二轮LGD vs C9 3
2014/07/14 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python实现登陆文件验证方法
2018/10/06 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
Python assert关键字原理及实例解析
2019/12/13 Python
python两个list[]相加的实现方法
2020/09/23 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
python 调整图片亮度的示例
2020/12/03 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
大学专科生推荐信范文
2013/11/23 职场文书
高校教师思想汇报
2014/01/11 职场文书
二手房买卖协议书
2014/04/10 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
教师聘用意向书
2015/05/11 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python