码迷,mamicode.com
首页 > Web开发 > 详细

PHP 抽象类实现接口注意事项

时间:2018-01-30 16:48:54      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:这一   函数   一个   c51   没有   post   关键字   设计   技术分享   

最近在学习Drupal8,看到源码里面一个抽象类BlockBase实现了一个接口BlockPluginInterface,但是并没有实现该接口的所有方法。然后我就不淡定了,因为之前是做.NET的,记忆中 “接口中定义的方法必须在继承类中全部实现”,可是Drupal8的源码的确摆在这里,不可能错啊。于是赶紧翻了下《PHP与MySql程序设计》书中关于接口的部分,看到书中赫然写着:

当类通过 implements 关键字 实现 了接口后,就完成了一个契约。接口中的所有方法都必须实现,倘若实现类没有实现所有方法,则必须声明为抽象类,否则将出现下面所示的致命错误··· ”

譬如,下面这段代码是不会报错的,结果仍然会输出“hello world!”

<?php  

interface ITest{
    public function func1();
    
    public function func2();
}

abstract class classtest implements ITest{}

echo "hello world!";

因为类“classtest”是抽象类,所以不会报错。

基础不牢,会怀疑人生的啊,还得多读书啊~

-----------------------------------------------------我是低调的分割线,对.NET不感兴趣的童鞋可以止步了~----------------------------------------------------

补充说一下,在.NET中,即使是抽象类,继承接口的话,也必须实现接口,这一点和PHP不同。实现的方法大致有两种:一种是直接实现,需要写出方法体;另一种是抽象实现,即虽然实现了,但是是以抽象函数的方式实现的,抽象函数是没有方法体的,参考代码如下:

技术分享图片
 interface ITest
    {
        void func1();

        int func2 ();
    }

    abstract class a_class_1 : ITest
    {
        public void func1()//显示实现,有方法体
        {
            throw new NotImplementedException();
        }

        public int func2()
        {
            throw new NotImplementedException();
        }
    }

    abstract class a_class_2 : ITest
    {
        public abstract void func1();//抽象方式实现,抽象函数没有方法体
        public abstract int func2();
    }
View Code

 

PHP 抽象类实现接口注意事项

标签:这一   函数   一个   c51   没有   post   关键字   设计   技术分享   

原文地址:https://www.cnblogs.com/zjfblog/p/8384277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!