PHP - 抽象类,也抽象方法。我这样做了吗?

时间:2015-03-19 23:46:10

标签: php

假设我有这个界面......

interface Foo {
    public function bar();
    public function nothing();
}

我的任务是写一个抽象类,它也抽象出方法",我只是想确保我正确地写这个。我的代码如下......

abstract class Bar implements Foo {
    abstract public function bar();
    abstract public function nothing();
}

这是正确的做法吗?

3 个答案:

答案 0 :(得分:0)

您不需要在抽象类中实现该接口。您的抽象类提供了一个类似于扩展它的类的接口的接口。

abstract class Bar {
    abstract public function bar();
    abstract public function nothing();
    public function concreteMethod() {
        print "I can do this in an abstract class";
    }
}

class Concrete extends Bar {
    public function bar() {
       print "in bar";
    }
    public function nothing() {
        //nothing
    }
}

答案 1 :(得分:0)

如果您不需要在抽象类中实现某些共享(通过所有子类)功能,则最好直接从接口派生,以使事情不会变得不必要。

在这种情况下,整个事情可以有意义地简化为:

<?php

    interface Foo 
    {
        public function bar();
        public function nothing();
    }

    class C implements Foo 
    {
        public function bar() {
            echo 'bar';
        }

        public function nothing() {
            echo 'nothing';
        }
    }

    $obj = new C();
    $obj->bar();

    ?>

阅读更多内容:

  

Is it good or bad for an abstract class to implement an interface?

答案 2 :(得分:0)

我不知道,但有一次机会是使用这样的实现接口创建抽象类。

interface Foo {
    public function bar();
    public function nothing();
}


abstract class Bar implements Foo  {
    public function bazz() {
        echo ' Bye';  
    }  
}

class Test extends Bar {
    public function bar()
    {
        echo 'Hello ';
    }
    public function nothing()
    {
        echo 'World';
    }
}

通过这个你有一个抽象类,从接口有抽象方法。它还用于某些体系结构设计中,您希望父类作为抽象类,但在接口中定义所有抽象方法。