在我的PHP层中,我收到错误代码为字符串(“NOT_FOUND”,“EXPIRED”等)。这是一个可能字符串的小列表,可能是十几个。
处理这些问题的最有效方法是什么?对存储在类中的字符串常量使用switch-case,还是应该先将它们解析为数字(或某些东西)?或者PHP足够智能,所以它并不重要?
答案 0 :(得分:3)
你可能想考虑使用常量?假设您有一个类Error
并在其中定义所有错误代码:
class Error {
const NOT_FOUND = 0;
const EXPIRED = 1;
// and so forth
}
然后你可以通过像Error::NOT_FOUND
那样访问它们来在你的代码中使用它们,并且switch语句不需要比较字符串,但是具有简单的整数而不降低可读性。
答案 1 :(得分:2)
这实际上取决于你想要对字符串做什么。要输出错误消息吗?然后你可以使用像这样的查找表而不是case语句:
$messages = array(
'NOT_FOUND' => 'The file was not found',
'EXPIRED' => 'The cookie expired'
// ETC
);
echo empty($messages[$error]) ? "Unknown error" : $messages[$error];
使用PHP 5.3,您还可以在数组中存储代码以处理错误情况:
$handlers = array(
'NOT_FOUND' => function() { /* Error handling code here */ },
'EXPIRED' => function() { /* Other error handling code */ }
);
if(!empty($handlers[$error])) {
$handler = $handlers[$error];
$handler();
}
else {
echo "Could not handle error!"; die();
}
使用这样的技术可以避免多个页面上的案例陈述。
使用PHP< 5.3您可能会调查call_user_func
以动态调度错误处理函数。
答案 2 :(得分:0)
无法将字符串识别为类常量。但是你的问题的答案是,如果你这样做,这并不重要:
switch (className::{$errorCode}) { // $errorCode == name of the constant, like NOT_FOUND
// Cases here.
}