我有一个类可以执行某些操作,当它完成后会返回true
,但如果出现任何错误,它将返回false
。现在我的问题是,如果此类事件的状态消息保存在类(Example1)内或类外(Example2),其中类可能只提供错误代码以帮助区分发生的事情。
class Example1 {
private $var;
private $status;
public function doSomething($var) {
$this->var = $var;
if (!is_numeric($this->var)) {
$this->status = 'Please provide a number';
return false;
}
if (empty($this->var)) {
$this->status = 'Please fill the field';
return false;
}
$this->status = 'Ok, you submitted a number, cool.';
return true;
}
function getStatus() {
return $this->status;
}
}
示例2:
class Example2 {
private $var;
public function doSomething($var) {
$this->var = $var;
if (!is_numeric($this->var)) {
return false;
}
if (empty($this->var)) {
return false;
}
return true;
}
}
示例1在我看来使用起来更方便,代码读起来就像一首诗,但同时似乎不太可重用,这取决于你使用类的内容,你可能希望成功/错误消息具有不同的语法。
所以基本上我的问题是通常的做法是什么?
答案 0 :(得分:1)
第一个例子:你的硬编码错误信息是......坏的。如果您稍后不再查看$object->status
,则无法看到错误消息
第二个例子:如果出现问题,你就会知道,但你不知道为什么。
我建议避免这两种方式并为更加面向对象的方法抛出异常(我想这就是你想要的,因为你正在使用类:)。
答案 1 :(得分:1)
这完全取决于你。如果您更容易理解错误消息并帮助您调试代码,那么请务必使用它。提出不同错误的错误代码可能只会减慢开发过程,除非您想隐藏用户的真实错误(但在这种情况下,您有几个选项,其中一个选项是不打印错误以进行筛选用户可能会看到它们。)
答案 2 :(得分:1)
这不是你要问的,但在一个函数中有多个return语句通常被认为是不好的做法。问题是,它使得更难以知道退出函数的位置,这使得不清楚执行的是什么。在您的示例中,如果第一个测试成功,则不执行其余代码。如果你之后设置了一些属性会发生什么?有时他们会被设定,有时他们不会。要摆脱这个问题,最好只有一个return语句。将执行更多代码,您将不得不改变编码方式以便习惯它。
以下是您所提供的代码的含义示例:
public function doSomething($var) {
$this->var = $var;
$result = false;
if (!is_numeric($this->var)) {
$this->status = 'Please provide a number';
}
else if (empty($this->var)) {
$this->status = 'Please fill the field';
}
else{
$this->status = 'Ok, you submitted a number, cool.';
$result = true;
}
return $result;
}