为什么会有接口呢?
一个 class 不是可以打遍天下呢?
对象接口
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
接口中定义的所有方法都必须是公有的,这是接口的特性,接口定义一个构造方法是被允许的。
实现(implements)
要实现一个接口,使用implements操作符。类中必须实现接口中定义的所有方法,否则会报错。类可以实现多个接口,用逗号来分割多个接口的名称。、
注意:接口中的方法不能有重名
注意:接口也可以继承,通过使用extends操作符
注意:类要实现接口, 必须使用和接口中所定义的方法完全一直的方式。否则会导致报错。
常量
接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。
iTemplate.php
<?php
interface iTemplate {
public function setVariable($name,$var);
public function getHtml($template);
}
Template 实现 iTemplate
Template.php
<?php
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;
}
}
// 可以被继承
A.php
<?php
interface A{
public function a();
}
B.php
<?php
interface B extends A {
// 继承接口,可以不使用父类接口的方法
public function b(Baz $baz);
// 继承接口,也可以重写父类接口的方法
//public function foo();}
C.php =>C implements B
<?php
class C implements B {
public function a()
{
echo "foolish";
}
public function b(Baz $baz)
{
echo "junk";
}
}
父类接口定义一个常量,子类implements 父类,不能重写常量
D.php
<?php
interface D {
const b = 'interface constant';
}
echo D::b;
F.php
<?php
class F implements D {
const b = "class F "; // 会报错
}
总结:
接口:
1:可以继承可以实现
2:接口只定义方法,实现
3:一个类实现某个接口(implements),那么这个类必须实现接口中所有的方法
4:接口的中定义的方法,关键字必须是 public
5:一个接口继承了另一个接口 (extends) ,然后一个类实现接口,必须实现两个接口中所有的方法
6:接口不能实例化
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。