ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 接口(interface) 接口的要点: * 接口是通过 `interface` 关键字来定义的; * 接口中的方法只能声明调用方式,不能定义这些方法的具体实现; * 接口中定义的所有方法都必须是 `public`; ``` <?php interface iTemplate { public function setVar($name, $var); public function getHtml($tpl); } ?> ``` ### 接口的实现 * 使用 `implements` 操作符来实现接口; * 类中必须实现接口中定义的所有方法,否则会报一个致命错误; * 必须使用和接口中所定义的方法完全一致的方式,否则会导致致命错误; ``` <?php class Template implements iTemplate { private $vars = array(); public function setVar($name, $var) { $this->vars[$name] = $var; } public function getHtml($tpl) { foreach($this->vars as $name => $value) { $tpl = str_replace('{' . $name . '}', $value, $tpl); } return $tpl; } } ?> ``` ### 接口的继承 ``` <?php interface a { public function foo(); } interface b { public function bar(); } interface c extends a, b { public function baz(); } ?> ``` ### 多接口的实现 * 实现多个接口时,用逗号来分隔多个接口的名称; * 实现多个接口时,接口中的方法不能有重名; ``` <?php 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(){} } ?> ``` ### 常量的使用 接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。 ``` <?php interface a { const b = 'Interface constant'; } echo a::b; /* --------- 错误写法 --------- */ class b implements a { const b = 'Class constant'; } ?> ```