深入解读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 相关文章推荐
文件系统基本操作类
Nov 23 PHP
dedecms模板标签代码官方参考
Mar 17 PHP
PHP添加MySQL数据记录代码
Jun 07 PHP
精通php的十大要点(上)
Feb 04 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
May 16 PHP
深入探讨PHP中的内存管理问题
Aug 31 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
php获取excel文件数据
Apr 21 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
php+Ajax处理xml与json格式数据的方法示例
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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
Node.js事件驱动
2015/06/18 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
jQuery可见性过滤选择器用法示例
2016/09/09 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
python实现哈希表
2014/02/07 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
Python如何实现FTP功能
2020/05/28 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
Python实现GIF图倒放
2020/07/16 Python
世嘉游戏英国官方商店:SEGA Shop UK
2019/09/20 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
总经理工作职责范文
2014/03/14 职场文书
新店开张活动方案
2014/08/24 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
2014年民政工作总结
2014/11/26 职场文书
2015年高一班主任工作总结
2015/05/13 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Golang 切片(Slice)实现增删改查
2022/04/22 Golang