企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
interface  接口类: **成员方法必须声明为public访问权限,有定义但没有具体实现,可以声明常量但无法声明属性,无法实例化,只能被其他类implements(实现)的特殊类.只能extends(继承)接口,但可以继承多个interface(接口) .** **1.接口中定义的所有方法都必须没有实现,只有定义** ~~~ <?php //错误示例: 方法进行了实现 interface human {     public function walk(){         // todo     }          public function run(){         // todo     } } ~~~ ( ! ) Fatal error: Interface function human::walk() cannot contain body in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 81 **2.接口中所有方法的访问修饰符都必须是public** ~~~ <?php //错误示例: 方法访问权限修饰符不是public interface human {     protected function walk();          private function run(); } ~~~ ( ! ) Fatal error: Access type for interface method human::walk() must be omitted in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 79 ~~~ <?php //正确示例: 方法访问权限修饰符必须都是public,且方法只有定义没有实现. interface human {     public function walk();          public function run(); } ~~~ **3.可以定义常量,但不能定义属性** ~~~ <?php //错误示例: 定义属性 interface mp4 {     $name = 'mp4';     public function vedio();     public function music(); } ~~~ ( ! ) Parse error: syntax error, unexpected '$name' (T\_VARIABLE), expecting function (T\_FUNCTION) in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 80 ~~~ <?php //正确示例: 定义常量 interface mp4 {     const name = 'mp4';     public function vedio();     public function music(); } ~~~ **4.不能被实例化,只能被其他类实现** ~~~ <?php //错误示例: 实例化 interface human {     public function walk();          public function run(); } $human = new human(); ~~~ ( ! ) Fatal error: Cannot instantiate interface human in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 83 ~~~ <?php //错误示例: 不是所有的方法都被实现.teacher::run()没有方法体 interface human {     public function walk();          public function run(); } //$human = new human(); class teacher implements human {     public function walk(){         echo "teacher walk";     }          public function run(); } ~~~ ( ! ) Fatal error: Non-abstract method teacher::run() must contain body in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 90 ~~~ <?php //错误示例: 不是所有的方法都被实现.human::walk没有被实现 interface human {     public function walk();          public function run(); } //$human = new human(); class teacher implements human {     public function run(){         echo "teacher run";     }; } ~~~ ( ! ) Fatal error: Class teacher contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (human::walk) in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 92 ~~~ <?php //正确示例: 所有的方法都被实现. interface human {     public function walk();          public function run(); } //$human = new human(); class teacher implements human {     public function walk(){         echo "teacher walk";     }     public function run(){         echo "teacher run";     };     // 还有有自己的特殊行为     public function teach(){         echo "teacher teach";     } } $teacher = new teacher(); $teacher->walk(); $teacher->run(); $teacher->teach(); ~~~ **5.可以extends(继承)其他接口,最后的类implements(实现)接口时,需要将继承链上的所有接口的抽象方法都实现** ~~~ <?php //错误示例: 没有将继承链上的接口的方法都实现 interface human {     public function walk();          public function run(); } interface male extends human {     public function showSelf(); } class man implements male {      } $man = man(); ~~~ Fatal error: Class man contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (male::showSelf, human::walk, human::run) in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 90 ~~~ <?php //正确示例: 继承链上的接口的方法都实现 interface human {     public function walk();          public function run(); } interface male extends human {     public function showSelf(); } class man implements male {      } class man implements male {     public function walk(){         echo "man wallk";     }          public function run(){         echo "man run";     }          public function showSelf(){         echo "man show himself";     } } $man = new man(); $man->walk(); $man->run(); $man->showSelf(); ~~~ **6.可以继承多个接口,多个被继承的接口用逗号隔开,最后的类implements(实现)接口时,需要将继承链上的所有接口的抽象方法都实现** ~~~ <?php //错误示例: 没有将继承链上的接口的方法都实现 interface mp3 {     public function music(); } interface phone {     public function call(); } interface mobilephone extends mp3, phone {     public function note(); } class iphone implements mobilephone {      } $iphone = new iphone(); ~~~ ( ! ) Fatal error: Class iphone contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (mobilephone::note, mp3::music, phone::call) in F:\\wamp\\www\\blog.54skyer.cn\\index.php on line 92 ~~~ <?php //正确示例: 将继承链上的接口的方法都实现 interface mp3 {     public function music(); } interface phone {     public function call(); } interface mobilephone extends mp3, phone {     public function note(); } class iphone implements mobilephone {     public function music(){     echo 'play a music';     }     public function call(){     echo 'make a call';     }          public function note(){     echo 'write a note';     } } $iphone = new iphone(); $iphone->music(); $iphone->call(); $iphone->note(); ~~~ 总结: 接口更多是定义一个标准,用来规范属于这个抽象范围内的子类或者实现类.如果希望代码工程是标准规范可控,应该业务模型阶段把接口都定义好,写业务逻辑时只需要关注实现就可以了,方法属性命名都可以在定义接口类时定义好. 注: implements(实现)接口的第一个普通类\[即可以是普通的class也可以是abstract class\],所有方法访问权限必须为public,方法的实现必须保持参数数量一致,参数名称可以不同. 有关abstract(抽象类)的相关只是见另一篇博文 => [类相关的关键字 - abstrct](http://www.php.cn/blog/admin/article_edit/6579.html "抽象类")