php接口和抽象类

/**
* 接口 : 关键字 interface
* 继承 implements
* 我的理解 : 接口就是让你按照规范去完成你想完成的事情 ... 换句话说 你想做的事情 我这里有方法 你自己去实现就可以了
* 但是我不管你怎么去实现 但必须要去做 ...
* 注意1 : 接口的方法 不需要方法体 ... 是不能有
* 注意2 : 所有的继承者 必须实现所有的方法
* 注意3 : 声明的时候 不需要再使用class关键字
* 注意4 : 接口不能有属性
* 注意5 : 接口可以实现继承多个接口
*
* 抽象类 : 关键字 abstract
* 继承 extends
* 我的理解 : 抽象类就是 我可以告诉你 这个东西大概有些什么东西 ... 但是这个东西有些是必须条件 ...
* 你必要去达到某种状态(有些方法必须去实现) 然后我可以再给你一些实用性的建议或者功能 ...
* 举例 : 现在有个抽象车类 有很多的车 ... 但是要知道很多车的构造和外观不一样 但是他们
* 都是车 看个示例代码
* 注意1 : 可以有属性
* 注意2 : 抽象类中的抽象方法不能有方法体 其他的可以.
* 注意3 : 抽象类中的抽象方法 子类必须实现
* 注意4 : 抽象类不能实现继承多个抽象类
* 注意5 : 抽象类可以被抽象类继承
*
* 总结 : 一开始我也觉得接口和抽象方法很像 但是仔细的去理解和测试过后 发现还是有很大的差异
* 一个类可以同时实现多个接口,但是只能实现一个抽象类。
* 接口 : 适合规定一些开发规范 你要实现功能 那么这些事情你必须要去做
* 抽象 : 你要实现一些功能 我可以给你提供一些雏形 还有一些公共的资源 然后你去根据自己的要求再实现你想做的事情
*/

接口正常逻辑的代码 :
 1 interface Answer{
 2     public function say();
 3     public function run();
 4 }
 5 
 6 class Kins implements Answer {
 7 
 8     public function say()
 9     {
10         // TODO: Implement say() method.
11         echo '这是Kins类中say方法的实现!<br>';
12     }
13 
14     public function run()
15     {
16         // TODO: Implement run() method.
17         echo '这是Kins类中run方法的实现!<br>';
18     }
19 }
20 
21 $k = new Kins();
22 
23 $k->say();
24 $k->run();
25 
26 /** result
27  * 这是Kins类中say方法的实现!
28  * 这是Kins类中run方法的实现!
29  */

接口不太正常的代码 ... (其实也算正常)

 1 interface Kinose{
 2     public function a();
 3     public function b();
 4 }
 5 
 6 interface Answer{
 7     public function say();
 8     public function run();
 9 }
10 
11 interface Test extends Answer,Kinose{
12     public function all();
13 }
14 
15 class T implements Test{
16     public function a()
17     {
18         // TODO: Implement a() method.
19     }
20     public function b()
21     {
22         // TODO: Implement b() method.
23     }
24     public function say()
25     {
26         // TODO: Implement say() method.
27     }
28     public function run()
29     {
30         // TODO: Implement run() method.
31     }
32     public function all()
33     {
34         // TODO: Implement all() method.
35     }
36 }

一个类实现多个接口 : 

 1 interface Kinose{
 2     public function a();
 3     public function b();
 4 }
 5 
 6 interface Answer{
 7     public function say();
 8     public function run();
 9 }
10 class C implements Answer,Kinose{
11     public function a()
12     {
13         // TODO: Implement a() method.
14     }
15     public function b()
16     {
17         // TODO: Implement b() method.
18     }
19     public function say()
20     {
21         // TODO: Implement say() method.
22     }
23     public function run()
24     {
25         // TODO: Implement run() method.
26     }
27 }

抽象类 : 

 1 abstract class Car{
 2 
 3     public $a;
 4     abstract function run();
 5     public  function driver(){
 6         return '我可以被人驾驶';
 7     }
 8 }
 9 
10 class Benz extends Car{
11 
12     /**
13      * @param mixed $a
14      */
15     public function setA($a)
16     {
17         $this->a = $a;
18     }
19 
20     public function run()
21     {
22         // TODO: Implement run() method.
23         echo '我是奔驰,我可以达到时速200Km/h!<br>';
24     }
25 }
26 
27 $bz = new Benz();
28 $bz->a = 1;
29 echo $bz->driver().'<br>';
30 $bz->run();
31 
32 /** result
33  * 我可以被人驾驶
34  * 我是奔驰,我可以达到时速200Km/h!
35  */

抽象类不正常的写法

 1 abstract class TCar{
 2 
 3     public $a;
 4     abstract function run();
 5     public  function driver(){
 6         return '我可以被人驾驶';
 7     }
 8 }
 9 
10 abstract class TTTCar extends TCar{
11 
12 }
13 
14 class A extends TTTCar{
15     function run()
16     {
17         // TODO: Implement run() method.
18         return '这是被继承的抽象类';
19     }
20 }

就这么多... 感觉坑有点多 ...  根据自己代码鲁出的心得  也不知道对不对... 不对后期再改吧 

原文地址:https://www.cnblogs.com/kinsFeng/p/9210117.html