深入解读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实现的MySQL数据浏览器
Mar 11 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
php 静态页面中显示动态内容
Aug 14 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
PHP session会话的安全性分析
Sep 08 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
基于php+MySql实现学生信息管理系统实例
Aug 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
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
Python中文字符串截取问题
2015/06/15 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python代码实现删除一个list里面重复元素的方法
2019/04/02 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python版百度语音识别功能
2019/07/09 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
python数据分析:关键字提取方式
2020/02/24 Python
Python中and和or如何使用
2020/05/28 Python
pandas实现导出数据的四种方式
2020/12/13 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
参观考察邀请函范文
2014/01/29 职场文书
快餐公司创业计划书
2014/04/29 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
荆州古城导游词
2015/02/06 职场文书
2015年人事科工作总结
2015/04/28 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
python爬虫--selenium模块
2021/03/31 Python
python turtle绘制多边形和跳跃和改变速度特效
2022/03/16 Python