浅谈PHP中抽象类,接口的区别
PHP的类和接口基本属于PHP面向对象的范畴了,PHP抽象类和接口概念上比较模糊,在TP系统中,PHP抽象类和接口没有本质的区别,而在原生的PHP中,如果我们要写接口的话是使用关键字 implements,而抽象类我们需要使用extends关键词来进行继承,当然extends关键词同样适用于PHP接口,如果我使用的是TP系统的话,则可以忽略接口的 implements 关键词,把接口直接写在控制器,然后公共文件使用 extends 来进行继承。
第一点的区别就是PHP接口使用的是 implements 关键词,抽象类使用的是 extends关键词,相同点是两者都可以使用extends关键词。
第二点的区别就是在接口不能声明成员变量和静态变量,但是又可以声明类的常量,而在抽象类当中,任何类型都是可以进行声明的,以便于实现数据的封装。
这一点的区别主要体现在原生的PHP中,而在TP系统中,接口里面是完全可以声明成员变量和静态变量,主要是写在控制C层里面,可以自行进行测试。
第三点的区别就是在接口中我们使用的是 public 公开类型,而抽象中使用的则是 private,protected,public 三种类型。
这一点的区别也是在原生的PHP中,在 TP 中,完全是相同的,接口和抽象类都是可以使用 private,protected,public 三种类型的。
第四点的区别一个类同时可以实现多个接口,但是一个类只能继承一个抽象类,这一点没什么好说的,很好理解,在抽象类里面我们可以任意的定义接口,但是这个抽象类只能继承一个其它类,比如公共类。
理解了PHP中的抽象类和接口的概念之后,再次运用起来就简单多了,PHP接口里面可以有多个不相干的对象组成,也就是多个不同的公共方法,而在公共方法中,我们可以调用抽象类,抽象类通常是写在模式里面,这里面主要是紧密相关的对象组成,以便于接口进行调用,如果有公共的函数或者方法,通常我们也都写在抽象类里面。
自己关于对PHP中抽象类以及接口的一些理解,PHP中面向对象的知识还有许多,一直在使用 TP 系统,对于原生的 PHP 面向对象和些陌生了,今天再来温飞一下,下面分享一个简单的关于接口,抽象类区别的小实例:
- <?php
- abstract class Father {
- function meth1() {
- echo "meth1...<br>";
- }
- abstract function meth2();
- public $var1="var1";
- public static $var2="var2";
- const Var3="Var3";
- }
- class Son extends Father {
- function meth2() {
- echo "meth2 of Son...<br>";
- }
- }
- $s=new Son();
- echo $s->var1."<br>";
- echo Father::$var2."<br>";
- echo Father::Var3."<br>";
- Interface IFather {
- //public $iVar1="iVar1"; 此处接口定义中不能包含成员变量
- //public static $iVar2="iVar2"; 此处接口定义中不能包含静态变量
- const iVar3="iVar3";
- function iMeth1();
- }
- Class ISon implements IFather {
- function iMeth1() {
- echo "iMeth1...<br>";
- //www.xiariboke.net
- }
- }
- $is=new ISon();
- echo IFather::iVar3;
- ?>
牛牛牛!跟着博主能学习到好多东西!
大佬啊!