您的班级功能是否有报告错误的通用标准?
我已经看到了一些你传递错误字符串的c函数,所以如果有错误你可以看到它在字符串中的含义,你需要指针。
我不愿意使用return,因为有时你确实需要返回其他变量。
我尝试的一件事是使用标准化的返回对象,里面有错误键以及数据。这似乎工作正常,但在与其他类一起使用时,似乎有点笨拙。
所以这是我的最新想法,该类有一个内部变量$ error,每次调用一个函数时,$ error被清除,并使用错误字符串或数组更新(甚至可能包含多个错误),当函数完成后我们可以检查错误是否为空。
这就是问题所在,如果我在函数中使用函数,我最终会清除错误。我可以将字符串保存在不同的var中,并且只有在返回之前将其推送到错误。
任何其他想法,优雅可靠地做到这一点?
答案 0 :(得分:4)
这是一个经过深思熟虑的话题,没有一个真正的答案。
但这是我熟悉的四种最常见的模式
每个
的快速示例例外
function doSomething()
{
if ( /* expression */ )
{
throw new Exception( 'something went wrong' );
}
}
// Let the registered exception handler do the work
doSomething();
// Or handle this call specifically
try {
doSomething();
}
catch ( Exception $e )
{
echo $e->getMessage();
}
错误代码
function doSomething()
{
if ( /* expression #1 */ )
{
return -1;
}
if ( /* expression #2 */ )
{
return -2;
}
return 1;
}
$return = doSomething();
switch ( $return )
{
case -1;
echo 'Error #1 Found';
break;
case -2;
echo 'Error #2 Found';
break;
default:
echo 'Success';
}
错误参数
function doSomething( &$error )
{
if ( /* expression #1 */ )
{
$error = 'Something went wrong';
}
}
$error = false;
doSomething( $error );
if ( $error )
{
echo $error;
}
错误状态
class Foo
{
private $error = false;
private $errorMsg;
public function doSomething()
{
if ( /* expression */ )
{
$this->setError( 'Something went wrong' );
}
}
public function isError()
{
return $this->error;
}
public function getErrorMsg()
{
return $this->errorMsg;
}
private function setError( $message )
{
$this->error = true;
$this->errorMsg = $message;
}
}
$f = new Foo();
$f->doSomething();
if ( $f->isError() )
{
echo $f->getErrorMsg();
}
在为项目选择系统(或系统组合)之前,您需要权衡每个系统的优缺点。
答案 1 :(得分:1)
没有共同的标准。解决方案完全取决于您的特定需求。
答案 2 :(得分:0)
考虑学习和使用exceptions。它们不是通用的解决方案,但如果使用得当,将使您的代码更具可读性和可理解性。