处理类的错误实例创建的正确方法?

时间:2018-03-19 14:20:23

标签: php

我有一个带有子类的Shape类,例如Rectangle和Triangle。我提供的代码尝试创建一个只有3个方面的Rectangle类'在传入的数组中。现在,抛出一个异常,对于这种情况似乎是正确的。唯一的问题是,这可以防止其余的代码被执行。解决这个问题的明显方法是删除不正确的创建调用,但我想知道是否有更复杂的方法来处理它?当只提供3个边时,有什么东西可以自动创建为三角形而不是矩形?感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用工厂方法执行此操作,例如:

class ShapeFactory {
    public function shapeFromSides($sides) {
        if (count($sides) == 4) {
            return $this->createRectangle($sides);
        }
        if (count($sides) == 3) {
            return $this->createTriangle($sides);
        }
        throw new \Exception('Unable to create shape from sides provided');
    }

    public function createRectangle($sides) {
        return new Rectangle($sides);
    }

    public function createTriange($sides) {
        return new Triangle($sides);
    }
}

显然,这不会创建您的对象,并且参数可能有误,但它应该让您了解此方法的工作原理。

但是,我同意@ deceze的评论。我并不认为创建一个具有无效边数的形状是你应该遇到的逻辑,因为它很可能是程序员错误。