深入解读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 相关文章推荐
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
非常重要的php正则表达式详解
Jan 04 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
php实现的http请求封装示例
Nov 08 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
MSN消息提示类
2006/09/05 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
Sea.JS知识总结
2016/05/05 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
python中enumerate函数用法实例分析
2015/05/20 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python的变量与赋值详细分析
2017/11/08 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
python文件排序的方法总结
2020/09/13 Python
小学二年级评语
2014/04/21 职场文书
挂靠协议书范本
2014/04/22 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
刘公岛导游词
2015/02/05 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL
Java 多态分析
2022/04/26 Java/Android