php interface
介绍 PHP 接口
PHP 接口是一种“协议”,它规定了类中必须包含哪些方法。实现这些方法的类就可以使用该接口。接口可以从所实现类的角度来看,看做是一种协议或者合同,类必须遵循这个契约。
创建 PHP 接口
要创建接口,需要使用 interface 关键字。 语法是简单的:
interface interface_name { public function method1(); public function method2($var1, $var2); public function method3(); ...}
接下来,我们可以在类中实现接口,这是通过 implements
操作符来实现的。
实现 PHP 接口
实现一个接口,使用 implements
操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。应当在实现接口的类中调用所有方法。
接下来的例子演示了如何实现一个接口。我们创建了一个 iTemplate 接口,然后实现了接口的实体类。实体类中必须定义接口中的所有方法:
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 $name=>$value){ $template = str_replace('{' . $name . '}', $value, $template); } return $template; }}
使用 PHP 接口
当实现一个接口时,所有的方法都必须是公有的。这是接口的规定。
接下来的例子演示了如何使用 iTemplate 接口的实体类 Template:
// 实例化对象$template = new Template;// 设置变量$template->setVariable("name", "菜鸟教程");$template->setVariable("url", "http://www.runoob.com");// 获取 HTML 并输出echo $template->getHtml("
继承 PHP 接口
一个接口能够继承另一个接口,与类的继承使用 extends 关键字类似,接口使用 extends 关键字。
父接口中定义的所有方法子接口都必须保留。
interface a{ public function foo();}interface b extends a{ public function baz(Baz $baz);}// 合法,所有方法都被实现class c implements b{ public function foo(){ } public function baz(Baz $baz){ }}
如果将示例中的接口 b 中的 baz() 方法的参数 Baz $baz 更改为 Foo $foo,那么将会得到以下错误:
Fatal error: Class c cannot implement b - interface b (incompatible with a) in...