代码之家  ›  专栏  ›  技术社区  ›  Mark Tomlin

PHP中的类抽象和对象接口之间的区别?

  •  7
  • Mark Tomlin  · 技术社区  · 15 年前

    A和A的区别是什么? Class Abstraction 和一个 Object Interfaces 在PHP中?我问是因为,我不太明白他们两个的意义,他们都做同样的事情!那么,使用两者的缺点有什么好处呢?

    抽象类 :

    abstract class aClass
    {
        // Force extending class to define these methods
        abstract public function setVariable($name, $var);
        abstract public function getHtml($template);
    }
    

    对象接口 :

    interface iClass
    {
        // Force impementing class to define these methods
        public function setVariable($name, $var);
        public function getHtml($template);
    }
    
    3 回复  |  直到 13 年前
        1
  •  20
  •   Community Mohan Dere    9 年前

    可以实现多个接口,但只能扩展一个类。

    可能的:

    class MyClass extends MyAbstract implements MyInterface1, MyInterface2, MyInterface3 {  }
    

    不可能:

    class MyClass extends MyAbstract1, MyAbstract2 implements MyInterface {  }
    

    此外,接口不能有实现。

    可能的:

    abstract class MyClass {
        function doSomething() {
            echo "I can give this method an implementation as this is an abstract class";
        }
    }
    

    不可能:

    interface MyClass {
        function doSomething() {
            echo "I can NOT give this method an implementation as this is an interface";
        }
    }
    

    Java Glossary :

    接口允许有人从头开始实现您的接口,或者用其他一些代码实现您的接口,这些代码的原始或主要目的与您的接口有很大的不同。对他们来说,您的接口只是偶然的,一些必须添加到他们的代码上才能使用您的包的东西。

    相反,抽象类提供了更多的结构。它通常定义一些默认实现,并为完整实现提供一些有用的工具。关键是,使用它的代码必须使用类作为基。如果其他想要使用您的包的程序员已经独立开发了自己的类层次结构,那么这可能会非常不方便。在Java中,类只能从一个基类继承。

    你也应该看看 this question -Damien关于接口如何成为契约的观点是很重要的。

        2
  •  3
  •   Annika Backstrom    15 年前

    抽象类 除了方法定义之外,还可以定义方法实现。安 推理 只能指定方法定义。

        3
  •  0
  •   Jarrod Nettles    15 年前

    多个接口加上脚本不会遇到任何父级混淆。

    推荐文章