深入解读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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
PHP全概率运算函数(优化版) Webgame开发必备
Jul 04 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
合格的PHP程序员必备技能
Nov 13 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
laravel5创建service provider和facade的方法详解
Jul 26 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
thinkphp5+layui实现的分页样式示例
2019/10/08 PHP
JavaScript学习历程和心得小结
2010/08/16 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python paramiko模块的使用示例
2018/04/11 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
大学生咖啡店创业计划书
2014/01/21 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
2014年林业工作总结
2014/12/05 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python