Php多级继承最佳实践[已关闭]

xytpbqjk  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(122)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

2天前关闭。
Improve this question
在使用某个体系结构的一些变通方法期间,我遇到了一个问题,我想知道这个实现是否遵循了最佳实践。
这里我们有一个抽象基类:

abstract class A {

    protected mixed $object;

    public function __construct() {

        $this->loadObject()
             ->fuc1();
    }

    abstract protected function loadObject(): self;
    abstract public function fuc1(): bool;
    abstract public function fuc3(): iterable;
}

在本例中,我想实现类B和C。如果我分别创建每个类,一切都很好,但只要这两个类具有相同的功能,我就决定为它们创建一个基类(BC),因此代码现在如下所示:

class BC extends A {

    protected string x;
    protected string y;

    protected function loadObject(): self {
         throw new \Exception('Child must implement loeadObject');
    }
    public function fuc1(): bool {
         //Some Codes
    }
    public function fuc3(): iterable {
        //Some Codes
    }
    
}

B类和C类是这样的:

class B extends BC {

    protected function loadObject(): self {
        $this->object = new SomeObject();
        return $this;
    }
}

class C extends BC {

    protected function loadObject(): self {
        $this->object = new SomeObject2();
        return $this;
    }
}

我们也不能把loadObject函数移到类BC中,因为类D可能想直接从类A继承。
我们也可以依赖接口,但我想知道如果有人忘记了让类B/C实现一个接口,那么我们将在类A中遇到问题。
那么,我们在类BC中抛出异常并强制其他开发人员不要忘记覆盖loadObject函数,这是一个好的实践吗?

hof1towb

hof1towb1#

这不是一个好的实践,如果你不需要在BC类中实现loadObject方法,你应该保持它的抽象。

abstract class BC extends A {
    protected string $x;
    protected string $y;

    public function fuc1(): bool {
    }
    public function fuc3(): iterable {
    }
}

相关问题