ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# interface 接口(需要implements实现) ## **interface 接口** > 子类实现接口用implements 特点: - 1.接口中只有常量属性和抽象方法(所有的方法都是抽象方法,就不需要abstract) - 2.接口也是特殊的类 - 3.不能实例化接口类 - 4.子类用implements实现接口,要实现接口中所有的方法,如果没有实现所有的抽象方法,就必须申明为抽象类 - 5.子类可以实现多个接口;而继承只能继承一个父类(如C类继承A类后就不能继承B类等其他类了) - 6.子类实现多个接口时子类必须实现多个接口源(父类)的所有抽象方法(如例子3中必须定义eat和say方法) 例子1: ``` <pre class="calibre10">``` interface <span class="token4">Person</span> <span class="token3">{</span> <span class="token">// public $name = 'zhangsan'; //报错</span> <span class="token">// 常量属性 </span> const HOST <span class="token1">=</span> <span class="token2">'localhost'</span><span class="token3">;</span> <span class="token">// 定义抽象方法 </span> public <span class="token5">function</span> <span class="token4">say</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> class <span class="token4">Boy</span> implements <span class="token4">Person</span> <span class="token3">{</span> public $name <span class="token1">=</span> <span class="token2">'张三'</span><span class="token3">;</span> public <span class="token5">function</span> <span class="token4">say</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo $this<span class="token1">-</span><span class="token1">></span>name<span class="token3">.</span><span class="token2">'Hello World!!!'</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token">// 实例化 </span> <span class="token">// $p = new Person; // 不可以实例化接口</span> $b <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Boy</span><span class="token3">;</span> $b<span class="token1">-</span><span class="token1">></span><span class="token4">say</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span><span class="token">//张三Hello World!!!</span> ``` ``` 例子2: ``` <pre class="calibre10">``` <span class="token">/* 实现接口,要实现接口中所有的方法,如果没有实现所有的抽象方法,就必须申明为抽象类 */</span> interface <span class="token4">Person</span> <span class="token3">{</span> public <span class="token5">function</span> <span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> public <span class="token5">function</span> <span class="token4">study</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> class <span class="token4">Boy</span> implements <span class="token4">Person</span> <span class="token3">{</span> <span class="token">// 抽象方法具体化 </span> public <span class="token5">function</span> <span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">'我要去新东方烹饪学院学习炒菜'</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">// 抽象方法具体化 </span> public <span class="token5">function</span> <span class="token4">study</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">'我要去蓝翔学习挖掘机技术'</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">// 自定义的方法 </span> public <span class="token5">function</span> <span class="token4">say</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">'我要使用PHP操作挖掘机,炒菜'</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> abstract class <span class="token4">Girl</span> implements <span class="token4">Person</span> <span class="token3">{</span> public <span class="token5">function</span> <span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">'6块钱的麻辣烫好贵,5块可行'</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">// study()抽象方法缺少所以必须声明为抽象类 </span> <span class="token3">}</span> $b <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Boy</span><span class="token3">;</span> $b<span class="token1">-</span><span class="token1">></span><span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $b<span class="token1">-</span><span class="token1">></span><span class="token4">study</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $b<span class="token1">-</span><span class="token1">></span><span class="token4">say</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> ``` ``` 例子3: ``` <pre class="calibre10">``` interface <span class="token4">A</span> <span class="token3">{</span> public <span class="token5">function</span> <span class="token4">say</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> interface <span class="token4">B</span> <span class="token3">{</span> public <span class="token5">function</span> <span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> class <span class="token4">C</span> implements <span class="token4">A</span><span class="token3">,</span>B <span class="token3">{</span> public <span class="token5">function</span> <span class="token4">say</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">'昨天晚上春儿和静静去澡堂洗白白,春儿给静静搓背'</span><span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> echo <span class="token2">'春儿这两天有点疲惫,需要吃点汇仁肾宝'</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> $c <span class="token1">=</span> <span class="token5">new</span> <span class="token4">C</span><span class="token3">;</span> $c<span class="token1">-</span><span class="token1">></span><span class="token4">say</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $c<span class="token1">-</span><span class="token1">></span><span class="token4">eat</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> ``` ``` **例子:接口对接** > 将老的或者要对接的接口类传入到新的或者自己的接口类中根据功能进行封装 ``` <pre class="calibre17">``` <span class="token">//老的代码 </span> class <span class="token4">User</span> <span class="token3">{</span> private $name<span class="token3">;</span> <span class="token5">function</span> <span class="token4">__construct</span><span class="token3">(</span>$name<span class="token3">)</span> <span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span>name <span class="token1">=</span> $name<span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">getName</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>name<span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token">//新代码,开放平台标准接口 </span> interface <span class="token4">UserInterface</span> <span class="token3">{</span> <span class="token5">function</span> <span class="token4">getUserName</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> class <span class="token4">UserInfo</span> implements <span class="token4">UserInterface</span> <span class="token3">{</span> protected $user<span class="token3">;</span> <span class="token5">function</span> <span class="token4">__construct</span><span class="token3">(</span>$user<span class="token3">)</span> <span class="token3">{</span> $this<span class="token1">-</span><span class="token1">></span>user <span class="token1">=</span> $user<span class="token3">;</span> <span class="token3">}</span> public <span class="token5">function</span> <span class="token4">getUserName</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> $this<span class="token1">-</span><span class="token1">></span>user<span class="token1">-</span><span class="token1">></span><span class="token4">getName</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> $olduser <span class="token1">=</span> <span class="token5">new</span> <span class="token4">User</span><span class="token3">(</span><span class="token2">'张三'</span><span class="token3">)</span><span class="token3">;</span> echo $olduser<span class="token1">-</span><span class="token1">></span><span class="token4">getName</span><span class="token3">(</span><span class="token3">)</span><span class="token3">.</span><span class="token2">"n"</span><span class="token3">;</span> $newuser <span class="token1">=</span> <span class="token5">new</span> <span class="token4">UserInfo</span><span class="token3">(</span>$olduser<span class="token3">)</span><span class="token3">;</span> echo $newuser<span class="token1">-</span><span class="token1">></span><span class="token4">getUserName</span><span class="token3">(</span><span class="token3">)</span><span class="token3">.</span><span class="token2">"n"</span><span class="token3">;</span> ``` ```