博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php抽象类和接口
阅读量:7104 次
发布时间:2019-06-28

本文共 2070 字,大约阅读时间需要 6 分钟。

接口

使用接口,你可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义标准类一样,但其中定义所有的方法都是空的,接口中定义的所有的方法都必须是public

实现一个接口,可以使用implement操作符,类中必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称

注意

  1. 实现多个接口时,接口中的方法不能有重名
  2. 接口也可以继承,通过使用extends操作符
  3. 接口中可以定义常量,接口常量和类常量的使用完全相同,他们都是定值,不能被子类或子接口修改

例子:

//声明接口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();//test

  

转载于:https://www.cnblogs.com/hylaz/archive/2012/11/11/2765397.html

你可能感兴趣的文章
linux运维实用的42个常用命令总结
查看>>
MySQL分库分表python实现分库(7th)
查看>>
OSPF虚链路virtual-link
查看>>
使用WM_QUIT终止线程
查看>>
String字符串的常用方法
查看>>
文件和目录权限chmod、更改所有者和所属组chown、umask、隐藏权限lsattr/chattr
查看>>
开启华为交换机路由器ssh访问
查看>>
linux 中的sar命令 与gnuplot绘图
查看>>
解决网站遭CC攻击(转载)
查看>>
软考题
查看>>
Django之单元测试
查看>>
Spring 项目全介绍
查看>>
“你的深度学习框架包含15个漏洞”,360说 | 附论文
查看>>
Android应用程序组件Content Provider的启动过程源代码分析(3)
查看>>
部署及配置ISCSI Target,Livemigration系列之三
查看>>
rundeck Web页面配置node节点
查看>>
Java程序员,笔试必读
查看>>
mySQL教程 第4章 数据查询
查看>>
linux 下 eclipse 开发环境的搭建
查看>>
android中DatePicker&TimePicker的应用
查看>>