深入解读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+DBM的同学录程序(2)
Oct 09 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
php注销代码(session注销)
May 31 PHP
学习php分页代码实例
Oct 24 PHP
PHP eval函数使用介绍
Dec 08 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
Apache服务器下防止图片盗链的办法
Jul 06 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
PHP通过GD库实现验证码功能示例
Feb 23 PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 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
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Zabbix实现微信报警功能
2016/10/09 Python
Python解惑之True和False详解
2017/04/24 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python中的for循环
2018/09/28 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
草莓巧克力:Shari’s Berries
2017/02/07 全球购物
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
25道Java面试题集合
2013/05/21 面试题
销售行政专员职责
2014/01/03 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
一帮一活动总结
2014/05/08 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
2014年文秘工作总结
2014/11/25 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
Python操作CSV格式文件的方法大全
2021/07/15 Python