php抽象类和接口
接口

使用接口,你可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义标准类一样,但其中定义所有的方法都是空的,接口中定义的所有的方法都必须是public
实现一个接口,可以使用implement操作符,类中必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称
注意
- 实现多个接口时,接口中的方法不能有重名
- 接口也可以继承,通过使用extends操作符
- 接口中可以定义常量,接口常量和类常量的使用完全相同,他们都是定值,不能被子类或子接口修改
例子:
//声明接口interface Itemplate{ public function setVariable($name,$var); public function getHtml($template);}//实现接口class Template implements Itemplate{ private $vars=array(); public function setVariable($name,$var){ $this->vars[$name]=$var; } public function getHtml($template){ foreach($this->vars as $names=>$value){ $template=str_replace('{'.$names.'}',$value,$template); } return $template; }} |
例子2:
interface a{ public function foo();}interface b{ public function bar();}//继承接口interface c extends a,b{ public function baz();}//实现接口class d implements c{ public function foo(){ } public function bar(){ } public function baz(){ }}interface a{ const b="hello";} |

抽象类
php5支持抽象类和抽象方法。抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类,任何一个类,如果他里面至少有一个方法是被声明为抽象的,那这个类就必须被声明为抽象的,如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现
继承一个抽象类的时候,子类必须实现抽象类中的所有的抽象方法,另外,这些方法的可见性必须和抽象类中一样(或更轻松),如果抽象类中的某个抽象方法被声明为proteected,那么子类中实现的方法应该声明为pritected或者public
例子:
abstract class AbstractClass{ //抽象方法 abstract protected function getValue(); abstract protected function prefieValue($p); //普通方法(非抽象方法) public function printOut(){ print $this->getValue(); }}class ConcreteClass1 extends AbstractClass{ protected function getValue(){ return "ConcreteClass1"; } public function prefieValue($p){ return "{$p}concreteclass1"; }}class ConcreteClass2 extends AbstractClass{ protected function getValue(){ return "ConcreteClass2"; } public function prefieValue($p){ return "{$p}concreteclass2"; }}$class1=new ConcreteClass1();$class1->printOut();echo $class1->prefieValue('FOO_');/* |
打印结果:ConcreteClass1
FOO_concreteclass1
2. 调用静态方法的抽象类仍然可行的 类常量不可以的
abstract class Foo{ const a="hello"; static function bar() { echo "test\n"; }}Foo::a;//没有输出Foo::bar();//testphp抽象类和接口的更多相关文章
- 抽象类 VS 接口
引言 接口和抽象类是面向对象编程(OOP, Object Oriented programming)中两个绕不开的概念,二者相似而又有所不同.接下来,我们来了解二者的概念并比较它们的异同. 什么是抽象 ...
- java抽象类和接口
面向对象设计过程中重要的一点是如何进行抽象,即把"问题空间"中的元素与"方案空间"中的元素建立理想的一对一的映射关系.抽象类和接口便是抽象过程中的产物. ...
- php中抽象类与接口的概念以及区别
php里面的接口类,抽象类到底有什么用呢? 刚接触php的时候,觉得这个东西没什么用,其实这些东西还是有一定的作用的,下面我就简单的说说. 1.php 接口类:interface 其实他们的作用很简单 ...
- Java 抽象类与接口
接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力.他们两者之间对 ...
- 浅谈我对C#中抽象类与接口的理解
C#中的抽象类与接口有些相似,初学者很容易混淆,今天就让我来谈谈对二者的理解. 首先我们得明确二者的含义,分述如下: 如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个 ...
- Atitit 深入理解抽象类与接口 attilax总结
Atitit 深入理解抽象类与接口 attilax总结 1.1. 主要区别接口侧重于动作抽象..抽象类是属性名词抽象..1 1.2. 抽象层次类>>抽象类>>接口1 1.3. ...
- luogg_java学习_07_抽象类_接口_多态学习总结
这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...
- PHP中抽象类,接口定义
这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看 ...
- 0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...
- Java抽象类与接口的区别
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...
随机推荐
- CSS3 Pie工具可以让IE6至IE8版本实现大多数的CSS3修饰特性,如圆角、阴影、渐变等
css3 pie使用方法: <!doctype html> <html lang="en"> <head> <meta charset=& ...
- 在centos7下安装mysql5.7
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpmyum localinstall -y mysql57- ...
- 编写一个程序实现strlen函数的功能
写自己的 strlen 函数-----→ mystrlen #include <stdio.h> #include <string.h> #define N 100 int m ...
- Oracle EBS-SQL (BOM-2):检查期间Bom的更改记录数.sql
Select MSI1.Segment1 上层编码, MSI1.Description 上层描述, MSI2.Segment1 ...
- IOSJSBRIGE商品内容模板
<p> 内容 </p> <script> window.onerror = function(err) { log('window.onerror: ' + err ...
- Unix/Linux环境C编程入门教程(15) BT5开发环境搭建
1. Backtrack 是处于世界领先地位的渗透测试和信息安全审计发行版本.有着上百种预先安装好的工具软件,并确定能完美运行,Backtrack5 提供了一个强大的渗透测试平台--从Web hack ...
- 面向对象程序设计-C++_课时12访问限制
private: 只有这个类(相同的类,不同的对象也可以)的成员函数可以访问这些成员变量或函数 public: 任何人都可以访问 protected: 只有这个类以及它的子子孙孙可以访问
- Extjs4 操作TreeStore 处理proxyAjax 获取的数据
近期在搞extjs4 TreeStore时有一个需求 就是要处理一下后台传过来的json数据然后再显示,看api也没有找到解决的方法 ,最后看源代码在Ext.data.proxy.Server 看到这 ...
- android入门——UI(5)
最近时间实在匆忙,博客的代码基本没有解释. 介绍ExpandableListView <?xml version="1.0" encoding="utf-8&quo ...
- 从UIImage的矩阵变换看矩阵运算的原理
1.矩阵的基本知识: struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty;}; CGAffineTransform CGAf ...