问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php implements和extends的区别

发布网友 发布时间:2022-04-13 02:06

我来回答

2个回答

懂视网 时间:2022-04-13 06:27

HP 类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此 PHP 引入了类的接口技术。

如果一个抽象类里面的所有方法都是抽象方法,且没有声明变量,而且接口里面所有的成员都是 public 权限的,那么这种特殊的抽象类就叫 接口 。

接口使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,且必须完全实现。

类中接口的应用

1.关键字:interface

2.关键字:implements

1.接口的介绍与创建

接口:一种成员属性全部为抽象或常量的特殊抽象类。

规则:

1.类中全部为抽象方法。

2.抽象方法钱不用加abstract。

3.接口抽象方法属性为public。

4.成员属性必须为常量。

格式代码如下:

interface demo { 
const NAME = "常量对象属性"; 
function myfun1(); //抽象方法
function myfun2(); //抽象方法,不用具体写入逻辑 
}

一,接口的定义和调用

<?php
interface Cinema
{
 const film = '加勒比海盗';
 public function show();
}
class Order implements Cinema
{
 public function show()
 {
 echo "影院 接口开放了<br>";
 }
}
$face = new Order();
echo $face->show(); 
echo Cinema::film;

说明:上面的例子要注意一点,接口的方法名是show,继承接口的类中必须有show这个方法,不然就会报错。也就是说接口的方法是假的,真正起作用的是在继承的类中的方法,这里接口和php的抽象类是不是有点像了?

二,对参数约束比较严

<?php
interface Cinema
{
 public function show(Order $show,$num);
}
// 显示正常
class Order implements Cinema
{
 public $number='0011排';
 public function show(Order $show,$num)
 {
 echo $show->number.$num;
 }
}
$face= new Order();
$face->show(new Order,$num='3人');//
输出 0011排3人

说明:上面的这个例子继承接口类中,调用接口的方法时,所传参数要和接口中的参数名要一至。不然就会报错。

三,接口间的继承和调用接口传递参数

<?php
interface Cinema
{
 public function show();
}
interface Cinema1 extends Cinema
{
 public function show1(Order1 $object,$num);
}
class Order implements Cinema1
{
 public function show()
 {
 echo "准备就绪<br>";
 }
 public function show1(Order1 $object,$num)
 {
 //var_dump($object);
 echo $object->number."$num<br>";
 }
}
class Order1
{
 public $number="0012排";
 function fun(){
 echo ' =================';
 }
}
$show = new Order1;
$show->fun(); 
$test = new Order();
$test->show(); 
$test->show1($show,$num='6人');
// 
输出 ===============准备就绪0012排6人

说明:上面的例子可以看到,接口Cinemal1继承了接口Cinemal,类Order继承了接口Cinemal1。不知道你发现没有,class类Order当中包括有二个方法,一个是show,一个show1,并且一个也不能少,如果少一个,报fatal错误。show1(Order1 $object,$num)中的Order1必须根继承类的名子要一样class Order1。如果不一样,也会报fatal错误。那如果一个接口被多个类继承,并且类名又不一样,怎么办呢?那就要用self了,下面会提到

四,一个接口多个继承

<?php
interface demo {
 const NAME = "电影名称";
 function fun1();
 function fun2();
}
interface demo2 {
 function fun3();
 function fun4();
}
interface demo3 {
 const TEST = "这里是测试Test";
 function fun5();
}
class MyDemo implements demo, demo2 {
 function fun1() {
 echo "你好";
 }
 function fun2() {
 echo "----------";
 }
 function fun3() {
 echo "我也好<br />";
 }
 function fun4() {
 echo "大家都好<br />";
 }
}
class YourDemo extends MyDemo implements demo3 {
 function fun5() {
 echo "继承类后引用接口";
 }
}
$p = new YourDemo;
$p->fun1();
$p->fun2();
$p->fun3();
$p->fun4();
$p->fun5();

以上输出

你好----------我也好

大家都好

继承类后引用接口

上面的例子中我们可以看到接口都使用关键字 interface 来定义,并使用关键字 implements 来实现接口中的方法,再举个例子:

<?php
//定义接口
interface User{
 function getDiscount();
 function getUserType();
}

class VipUser implements User{ //VIP用户 接口实现
 private $discount = 0.8; // VIP 用户折扣系数
 function getDiscount() {
 return $this->discount;
 }
 function getUserType() {
 return "VIP用户";
 }
}
class Goods{
 var $price = 88;
 var $vc;
 function run(User $vc){ //定义 User 接口类型参数,这时并不知道是什么用户
 $this->vc = $vc;
 $discount = $this->vc->getDiscount();
 $usertype = $this->vc->getUserType();
 echo $usertype."商品价格:".$this->price*$discount;
 }
}
$display = new Goods();
$display ->run(new VipUser); //VIP用户商品价格:70.4

这个例子演示了一个 PHP 接口的简单应用。该例子中,User 接口实现用户的折扣,而在 VipUser 类里面实现了具体的折扣系数。最后商品类 Goods 根据 User 接口来实现不同的用户报价.

最后总结下:

抽象类和接口的区别

接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:

1.一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。

2.如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。

3.抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

热心网友 时间:2022-04-13 03:35

extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 高以翔演过哪些电视剧 罗威纳体重不达标 《女人不坏》里的X先生是谁演的? 《女人不坏》里桂纶镁的男朋友X是谁演的 我家买了一只4个月大的罗威纳(母狗)起个什么好听的名字呢?不要太俗的 《天堂来的孩子》饰演以翔的叫什么啊 狗名字...罗威那,公.黑色 有睡认识高以翔,知不知道他什么时候出道的? 高以翔都演过什么电视啊 《那片星空那片海2》陆骁是谁演的? 《斗牛要不要》中蓝地的坦克是谁 女人不坏里的X是谁扮演的? 北京有几个火车站?去北京的王府井商业街该怎么走啊?坐火车坐到哪里 在电影《女人不坏》里扮演桂纶镁的男友X的演员叫什么名字? 《在女人不坏》中扮演&quot;X&quot;的人是谁 北京到临沂怎么坐高铁 麦乐迪(安定门) 中国哪些城市境内有电车 从北京站怎么去朝阳北苑路大屯里106号 急 王府井离隆福寺有多远?怎么从王府井坐车到隆福寺那边的娃哈哈酒店? 罗威公狗好还是母狗好 罗威纳犬。怎么样啊 我想申请一个怎么申请的 社保断交多久会作废? 马这个字一共几画 马有几画怎么写 马字是几画 马字多少画 马多少笔画? 马有几笔画 马字有几画。 马字多少笔画 怎么申请新的 马字有多少画? 马字一共几画怎么写 马几笔几画 用电脑怎么申请? 大写的“马”有多少画? 请问新用户如何申请 想学习jmeter,有没有好书推 荐一下