2010-08-28 23 views
4

$ result = validateUploadedFile($ _ FILES);这是有条件的检查过度杀伤力?

if (!empty($result) && !empty($result['valid']) && $result['valid']) 
{ 
    // do sth 
    // I don't know why sometime this three checks will cause me problems 
    // In other words, even if $result['valid'] is TRUE, this scope will not be hit 
} 

函数validateUploadedFile返回一个数组作为$ result ['valid'] == TRUE,如果它通过。

下面是问题,if语句是否检查太多? 我可以简单地检查以下内容吗?我没有几个PHP语言知识,不知道这些检查是否有必要。

if ($result['valid']) 
{ 
    // do sth 
} 

谢谢

function validateUploadedFile($uploadedFile) 
{ 
    // Define file size limit 
    $result = array('valid' => FALSE, 'error_message' => null, 'error_code' => null); 

    if (sth_wrong) 
    { 
     $result['error_message'] = 'sth_wrong'; 
     return $result;  
    } 

    if (sth_wrong2) 
    { 
     $result['error_message'] = 'sth_wrong2'; 
     return $result;  
    }  

    $result['valid'] = TRUE; 
    return $result; 
} 
+0

validateUploadedFile是什么样的?它会一直有效吗?如果你正在完成这个功能,那么你就会对结果不那么小心。 – 2010-08-28 22:43:33

+0

你好保罗, 我已更新我的文章。 谢谢 – q0987 2010-08-29 00:57:26

回答

10

这取决于在上传的文件无效的情况下函数返回的内容。这应该在多数情况下可能就足够了,但:

if (!empty($result['valid'])) 

由于:

  • FALSEempty
  • NULL(或解封数组索引)是empty
  • 它不会抱怨,甚至如果$result是空阵列

你也可以只做到

if (!$result['valid']) 

,但是这会给你E_NOTICE如果该元素没有设置。

+0

这是正确的。检查$ result是否有值,也可以是数组,然后检查数组的键是否有值。 – Inigoesdr 2010-08-29 00:29:17

+0

你好拉蒙, 我刚刚发现在某些情况下,我只是不能得到预期的结果,如果我检查连续三个条件。 看来,空对我来说是最好的。 有没有!空给我一个E_NOTICE? 谢谢 – q0987 2010-08-29 01:01:32

+0

不,它没有。即使'$ result'完全未定义,这也是值得注意的事情,因为有可能忘记'empty($ reslut ['valid'])''这样的错误信息。 – Ramon 2010-08-29 08:59:20

4

我想

if (isset($result['valid']) && $result['valid']) 

会工作得很好。

+0

你好Zahymaka, 我读的地方表明!empty比isset更好。 谢谢 – q0987 2010-08-29 00:59:00

+0

!只要'有效'索引被设置,空应该不会抛出E_NOTICE错误。 – Zahymaka 2010-08-29 01:31:10

+0

我认为'empty'就像'isset',因为它不需要参数存在,所以即使没有设置“有效”索引,也不会出现“E_NOTICE”错误。 – Ramon 2010-08-29 10:35:02

1

您可以测试它。在这个特殊情况下,似乎你并不完全确定要检查哪些值。在大多数情况下,根据逻辑,只需执行!$ result ['valid']/should/work - 但假设PHP将null/unset值视为'false'。

制作一个快速脚本,分别测试所有条件。

  • 当$ result为空时调用empty($ result ['valid'])会发生什么?
  • 调用时会发生什么!$ result ['valid']未定义时的结果$ result ['valid']?

继续。写一个脚本。测试它,并知道。

+0

你好,克苏鲁, 我发现了一些问题,我不能在卷中进行3次检查。对于一些结果我会遇到一些问题。 谢谢 – q0987 2010-08-29 01:00:05

2

您的方法更多的是您应该使用原始用户输入进行的操作。但是,由于你正在处理一个函数,因此它可以轻松地完成繁重的工作。

只要确保它始终设置'valid'键;您的代码将更具可读性和安全性。如果你这样做,if($result['valid'])就足够了。

+0

根据更新,在这种情况下,“valid”键总是被设置,所以'if($ result ['valid'])'确实就足够了。 – 2010-08-29 01:03:06

相关问题