2013-02-26 74 views
0

我应该避免在我的代码中有很长的序列化IF语句列表吗?有时似乎不可避免,但我想知道这是否是我的缺乏经验。我应该避免一长串IF声明吗?

例如,如果你正在处理图像的用户上传了 - 你想给的任何错误,准确的反馈 - 你可能会碰到这样的:

if($file["size"] == 0) { 
    throw new Exception("ERROR: File was empty"); 
} 

if (($file["type"] != "image/gif") 
|| ($file["type"] != "image/jpeg") 
|| ($file["type"] != "image/pjpeg") 
|| ($file["type"] != "image/png")) { 
    throw new Exception("ERROR: Image must be either GIF, PNG or JPEG!"); 
} 

if ($file["size"] > 2000000) { 
    throw new Exception("ERROR: Image must be than less 2MB!"); 
} 

    if ($file["error"] > 0) { 
    throw new Exception("UNKNOWN ERROR: ".$file['error']); 
} 

$imgDetails = getimagesize($file["tmp_name"]); 

if($imgDetails['channels'] != 3){ 
    throw new Exception("ERROR: Image must be RGB.)"; 
} 

if($imgDetails['0'] < 50 && $imgDetails['1'] < 50) { 
    throw new Exception("ERROR: Image must be larger then 50 x 50.)";   
} 

等等,等等等等直到最终文件通过所有测试并被处理。

这是“坏习惯”吗?

回答

1

您可以使用in_array来缩短类型检查,但通常这是一种很好的形式,除了将输出直接从该函数中输出外。如果使用类完成此操作,则可能需要使用异常而不是直接推送错误输出。

回归早,回归常。

+0

这听起来很明智! :)虽然我正在阅读Exceptions,但这个博客让我感到困惑。以上哪种类型的例外...? http://blogs.msdn.com/b/kcwalina/archive/2007/01/30/exceptionhierarchies.aspx – 2013-02-26 19:14:04

+0

这取决于你想走多远。如果你想做的只是传递一个消息,你可以放弃使用基本的异常类。设置异常类允许您以不同的方式处理每种类型的异常,这可能不是必需的。 – datasage 2013-02-26 19:17:42

+0

谢谢,我已经更新了现在的问题 - 只是为了好的措施:) – 2013-02-26 20:29:45

0

我发现平时的那种,如果您链​​正在谈论罐头变成一个函数的散列图,用一些选择器作为它们的关键。

如果你有一个散列图,就像$processImage = { "image/gif" => function processGIF(){blah} }你可以访问O(1)中的每个函数而不是O(n/2)的平均值(假设调用的正态分布也是不准确的)。你知道,哪些事情无关紧要,除非事情发生很多。

然后就可以调用使用$processImage["image/gif"]();该功能(我认为这是有效的语法,我已经做了比PHP多很多JS在最近几年。)

我确实觉得HashMap的做法是相当扩展性和虽然可以阅读,所以它有这样做。

有重构这些的好处,当然..但在很多情况下,这样做的好处是最小/情况。