php接口继承
PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类.为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法.接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口也是一种特殊的类,为什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是抽象方法,那么我们就换一种声明方法使用“接口“;也就是说接口里面所有的方法必须都是声明为抽象方法,另外接口里面不能声明变量(但可声明常量constant),而且接口里面所有的成员都是public权限的。所以子类在实现的时候也一定要使用public权限实限。
声明一个类的时候我们使用的关键字是”class”,而接口一种特殊的类,使用的关键字是“interface”;
类的定义: class 类名{ … } ,接口的声明:interface 接口名{ …}
代码
代码
<?php
//定义一个接口使用interface关键字,“One”为接口名称
interface One
{
//定义一个常量
const constant = 'constant value';
//定义了一个抽象方法”fun1”
public function fun1();
//定义了抽象方法”fun2”
public function fun2();
}
?>
上例中定义了一个接口”one”,里面声明了两个抽象方法“fun1”和”fun2”,因为接口里面所有的方法都是抽象方法,所以在声明抽象方法的时候就不用像抽象类那样使用”abstract”这个关键字了,默认的已经加上这个关键字,另外在接口里边的”public”这个访问权限也可以去掉,因为默认就是public的,因为接口里所有成员都要是公有的,所在对于接口里面的成员我们就不能使用“private”的和”protected”的权限了,都要用public或是默认的。另外在接口里面我们也声明了一个常量“constant“, 因为在接口里面不能用变量成员,所以我们要使用const这个关键字声明。
因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现。
我们可以使用”extends”关键字让一个接口去继承另一个接口:
<?php
//使用”extends”继承另外一个接口
interface Two extends One
{
function fun3();
function fun4();
}
?>
而我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是”implements”,而不是我们前面所说的”extends”;
代码
<?php
//使用“implements”这个关键字去实现接口中的抽象方法 接口和类之间
class Three implements One
{
function fun1()
{
…
}
function fun2()
{
…
}
}
//实现了全部方法,我们去可以使用子类去实例化对象了
$three=new Three();
?>
我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行;
在前面我们说过,PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口,就相当于一个类要遵守多个规范,就像我们不仅要遵守国家的法律,如果是在学校的话,还要遵守学校的校规一样;
<?php
//使用implements实现多个接口
class Four implemtns 接口一, 接口二, ….
{
//必须把所有接口中的方法都要实现才可以实例化对象。
}
?>
PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口;
<?php
//使用extends继承一个类,使用implements实现多个接口
class Four extends 类名一 implemtns 接口一, 接口二, ….
{
//所有接口中的方法都要实现才可以实例化对象
………
}
?>
② php接口调用的方法复用多一点还是尽量不复用好一点从性能上来讲,方法的复用对性能的影响有多大
代码复用性,优点就是可以减少代码量,后期维护的时候不需要重复的去修改一大片相同的代码,比如写了一个获取ID的公共方法,这种就没必要每次重复的写代码;当然了,如果一个文件中有很多函数的话,这些函数不用也会被加载到内存。
但是现在的服务器配置都是相当的高,提升点儿内存代价不大;如果写的代码不进行封装,不考虑重复性,那么后期项目升级开发和维护的时候,付出的代价是很大的,代价大不说,并且都是重复的工作量,没多大意义,一般软件公司,都会对常用的函数块继续封装,然后存放到公共通用的文件里面,来进行调用。
③ thinkphp5 implements和extends的区别
extends 是继承某个类
继承之后可以使用父类的方法
也可以重写父类的方法
implements 是实现多个接口
接口的方法一般为空的
必须重写才能使用
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实
现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了
比如
class A extends B implements C,D,E
extends 继承类implements 实现接口
类和接口是不同的。类里是有程序实现的;而接口无程序实现,只可以预定义方法 extends 继承类
implements 实现接口
Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以
Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。如以Java程式
语言的角度来看﹐Java的interface则表示:一些函数或资料成员﹐为另一些属于不同类别的物件所需共同拥有﹐则将这些函数与资料成员﹐定义在一
个interface中﹐然后让所有不同类别的Java物件可以共同操作使用之。
④ PHP不是不支持多重继承那这个是什么问题 - PHP框架开发
主要是php这样的语言实现多继承非常麻烦。。。。。代价昂贵在我设计开发过程中,发现确实需要多继承的。。。。通过接口的\"多继承\",作用不大。。。。。只能重用接口定义,。。。
⑤ 我们应该什么情况下使用继承,什么情况下用实例化,什么情况下使用一个接口 - PHP进阶讨论
要使用继承的话,可以将两个类放到一个文件中,你这个父类只会有一个基类,这样也可以。继承不继承的对你这个来说,没什么大不了,你也可以直接扩展父类。个人观点,那些设计模式没必要生搬硬套,性能也很重要,如果不用那些设计模式,也可以很简便的达到目的的话,就不用。
⑥ php中的接口是指什么
接口interface是一个来规定,给人继承用的源东西,有点像抽象类。
接口定义了实现某种服务的一般规范,声明了所需的函数和常量,但不指定如何实现。之所以不给出实现的细节,是因为不同的实体可能需要用不同的方式来实现公共的方法定义。关键是要建立必须实现的一组一般原则,只有满足了这些原则才能说实现了这个接口。
(6)php接口继承扩展阅读
PHP接口(interface)的特点 :
1、接口的方法必须是公开的。
2、接口的方法默认是抽象的,所以不在方法名前面加abstract。
3、接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。
4、类可以实现多个接口(相当于把多个功能集于一身,如手机实现了小灵通、MP3、MP4的功能)
5、接口也可以继承接口。
PHP同大多数的面向对象语言一样,并不支持多重继承。如果需要实现多重继承功能,在PHP中,可以通过接口,它是PHP解决多重继承问题的方法,在php5.4版本之后有个类的新特性trait,有兴趣的可以网络下。
⑦ 接口 继承 php
首先 这是一个很好的PHP接口的例子
在这里PC类他实例化的对象是$P
PC类有一个方法 叫PCUSB(),调用的时候 参数 是一个继承了接口usb的MP3类的对象$MP3
因此在此时 $MP3 实现了(或者是override(重写了))接口里边的type 和alert 方法
所以呢
$p->pcusb($mp3);
PCUSB被调用时传参
function pcusb($mp3){
$mp3->type();
echo "<hr>";
$mp3->alert();
}
就相当于 直接调用了 $MP3中的方法一样了
⑧ php中类的继承是通过哪个关键字来实现的
php类有三种:
普通写的class 类 用extends来继承
抽象类abstract类 也是用extends来继承
接口类interface类用的是implements来继承的
⑨ php中implements和extends的区别
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了