Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php抽象类扩展另一个抽象类_Php - Fatal编程技术网

php抽象类扩展另一个抽象类

php抽象类扩展另一个抽象类,php,Php,在PHP中,抽象类是否可能从抽象类继承 比如说, abstract class Generic { abstract public function a(); abstract public function b(); } abstract class MoreConcrete extends Generic { public function a() { do_stuff(); } abstract public function b(); // I want

在PHP中,抽象类是否可能从抽象类继承

比如说,

abstract class Generic {
    abstract public function a();
    abstract public function b();
}

abstract class MoreConcrete extends Generic {
    public function a() { do_stuff(); }
    abstract public function b(); // I want this not to be implemented here...
}

class VeryConcrete extends MoreConcrete {
    public function b() { do_stuff(); }

}
(不回答)

是的,这是可能的


如果子类没有实现抽象超类的所有抽象方法,那么它也必须是抽象的。

是的,但是如果调用
$VeryConcreteObject->b()


更详细的解释。

即使您离开抽象函数b(),它也可以工作;课堂上更具体

但在这个特定的例子中,我将把类“Generic”转换成一个接口,因为除了方法定义之外,它没有更多的实现

interface Generic {
    public function a(); 
    public function b();
}

abstract class MoreConcrete implements Generic {
    public function a() { do_stuff(); }
    // can be left out, as the class is defined abstract
    // abstract public function b();
}

class VeryConcrete extends MoreConcrete {
    // this class has to implement the method b() as it is not abstract.
    public function b() { do_stuff(); }
}

在这里询问之前,你真的运行过代码吗?@Jakub我想这是可能的,就我所知是的。它不起作用。因为。。。
抽象公共函数b()在第二个类中。没有它,它就会消失。问题回答:你为什么不使用接口和traits@ied3vil发布问题时,PHP中尚未提供Traits在第二个类中它工作。。。回答说,谢谢,但定义的顺序很重要。如果将类VeryConcrete放在第一位,则会出现“致命错误:类”MoreCreate“找不到”错误。小心不要本末倒置。