如何在类调用者级别提供错误报告的同时正确调用类

时间:2014-02-27 15:57:59

标签: php oop error-handling

我正在编写新的代码,作为重构旧版旧代码库的一部分。

具体来说,我正在编写一个Device类,用于计算设备的各种规格。

Device类取决于设备的型号和粒子数,我可以将其称为$device = new Device($modelNumber, $particleCount);

问题:由于这个类将进入现有的遗留代码,因此我没有直接影响是否正确调用此类。要使Device起作用,它需要具有正确的型号和正确的粒子数。如果它没有收到正确的配置数据,则不会初始化内部设备,并且该类将不起作用。我认为我需要找到一种方法让调用者知道存在错误,以防提供无效的配置数据。如何构建它以符合面向对象的原则?

或者,或者,我是否需要关注此事?我认为有一个原则,如果你提供垃圾,你会得到垃圾回收,我的班级只需要正确使用适当的数据。如果提供了不正确的数据,它可以代替烘焙蛋糕,或者什么都不做(并且可能无声地失败)。好吧,我不确定这个原则是否会很好。如果提供的配置数据不好,我确实需要抱怨。

以下是我正在思考的一些代码:

$device = new Device($x, $y); 
$device->getData();

如果$ x或$ y超出设备规格,则上述操作将失败或产生错误或无数据。我不知道如何处理这个失败。我还想假设$ device在调用getData()方法时有效,我无法做出这样的假设。

$device = new Device($x, $y); 
if ($device->isValid())
    $device->getData();
else
    blow_up("invalid device configuration supplied");

以上是更好的,但调用者现在必须调用isValid()函数。这也“降低了”我的班级。它必须做两件事:1)创建设备,2)验证设备配置是否有效。

我可以创建一个处理配置通知的DeviceChecker类。也许这是一个解决方案。令我困扰的是,DeviceChecker必须包含Device类中已有的部分逻辑。

问题

  • 我想在这里解决什么问题?除了我的“简单类”问题,我是否真的试图设计一个错误处理系统?我想我可能就是......好吧,我现在没有做到这一点(遗留代码库很大)。我现在可以做些什么,可能是我触摸的代码片段的本地化?我正在寻找这个问题。

1 个答案:

答案 0 :(得分:1)

I think you need to use below code to verify your passed arguments in construct
  class Device {
        public function __constructor($modelNumber, $particleCount) {
            if(!$this->isValid($modelNumber, $particleCount) {
                return false; //or return any error 
            }
        }
    }   
This will check the passed params are valid or not and create object based on that only, otherwise return false or any error.