Home > php教程 > PHP源码 > PHP抽象类和接口示例和区别

PHP抽象类和接口示例和区别

WBOY
Release: 2016-06-08 17:19:49
Original
984 people have browsed it

PHP抽象类和接口是什么意思它们两者有什么区别呢,在此小编来为各位介绍一篇关于PHP抽象类和接口的区别吧,具体的细节如下所示,希望文章能够帮助到各位朋友。

<script>ec(2);</script>

抽象类(abstract class)和接口(interface)是面向对象很重要的概念,他们很相似,都是定义要实现的方法,但又有不同的使用场景,PHP的抽象类和接口有什么区别,看下面的示例。

接口(Interface)—— 定义行为
抽象类(Abstract  Class) —— 实现行为
具体类(class)——执行行为


一.接口

接口定义了某种函数的规范,声明了所需的函数和常量,但是不能指定怎么实现。接口像是对具体类中方法的规范。

接口定义了发生某一行为需要的方法、方法名。然后允许具体的类来实现这些方法。。
注意:接口类不能定义类成员。定义的方法必须在实现的类中出现。

interface 接口名
{
function 方法1( );
function 方法2( );
}
//实现接口
class 类名 implements 接口名
{
 方法1( );
方法2( );
}

二.抽象类

抽象类是实例化的类,只能作为被其他类基层的基类。例如,可以写一个关于read的抽象类,然后电子阅读,纸质阅读来继承read抽象类。
abstract class 类名
{
各种方法
}

抽象类可以确保一致性,因为任何派生类都必须实现从该抽象类继承所有抽象方法,如果没有实现,那将产生错误。

应该用抽象类?还是 接口?
这是一个问题

** 如果要建一个类模型,这个模型将由一些紧密相关的对象采用,使用抽象类。如果模型将由不太相关的对象采用,用接口。
** 如果一个具体class将从多个来源继承行为,用接口。php类可以继承多个接口,但是不能继承多个抽象类。
** 如果所有的类都要共享一个公共的行为实现,用抽象类,并在其中实现该行为。。先用子类继承一个抽象类,继承后的子类能够实现原先的行为。。

摘: _______

事物的出现,总是有它出现的理由(需求)!
但是,事物的生存,需要有适应性(灵活)!
比如:长颈鹿,脖子长,这是个抽象的概念;
能吃草(是非肉食性动物的特征,接口)。

所以,当需要描述长颈鹿的时候,我们就可以用接口(非肉食性动物)和抽象(脖子长)的方法来定义它,
然后,具体是什么种类/或者颜色的长颈鹿,怎么个吃草法,这就是具体类了

PHP接口类

首先看接口,定一个接口类,interface class:


 
namespace frontend\models;
 
interface TestInterface
{
    public function cloud();
 
    public function sky();
 
    public static function color($color);
}

在PHP中,接口只能定义方法(或静态方法),但是不能实现具体的方法。在PhpStorm中如果写具体的方法会提示错误。接口比较严格的定义需要实现什么方法,只写要实现的方法就行了,不需要具体实现,或定义成员变量。

使用接口:

 
namespace frontend\models;
 
class Test implements TestInterface
{
    public function cloud()
    {
        echo 'Cloud....';
    }
 
    public function sky()
    {
 
    }
 
    public static function color($color){
 
    }
}
继承接口类,必须实现接口定义的每个方法,否则也会报错。这就是PHP的接口,严格定义实现哪些方法,并且必须在子类中都实现。

PHP抽象类

我们定义一个抽象类:


abstract class Testabstract
{
    public $abstract = 'abstract';
    abstract function hehe();
 
    public function hehe2()
    {
        echo 'hehe2';
    }
}

这里有两个方法,一个是用abstract修饰的,这样写表示该方法是子类必须实现的,而抽象类中只能定义不能具体实现。一个方法是普通的成员方法,而且有具体实现,子类也可以重写。


class ab extends Testabstract
{
    public function hehe()
    {
        echo 'hehe';
    }
}

子类继承抽象类,只需实现抽象类中定义的抽象方法。抽象类可以定义成员变量,而接口不行。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template