深入解读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和ACCESS写聊天室(二)
Oct 09 PHP
PHP中的日期处理方法集锦
Jan 02 PHP
php db类库进行数据库操作
Mar 19 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
php smarty模板引擎的6个小技巧
Apr 24 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHP 实现公历日期与农历日期的互转换
Sep 13 PHP
PHP常量define和const的区别详解
May 18 PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 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实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
Javscript调用iframe框架页面中函数的方法
2014/11/01 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
英国的领先快速时尚零售商:In The Style
2019/03/25 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
鲁迅故里导游词
2015/02/05 职场文书
学校党员干部承诺书
2015/05/04 职场文书
贫困证明书范文
2015/06/16 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python