这种有条件的检查是否过度杀伤?

时间:2010-08-28 22:41:19

标签: php

$ 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;
}

4 个答案:

答案 0 :(得分:10)

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

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

自:

  • FALSEempty
  • NULL(或未设置的数组索引)为empty
  • 即使$result是一个空数组
  • ,它也不会抱怨

您也可以这样做

if (!$result['valid'])

但如果未设置该元素,这将为您提供E_NOTICE

答案 1 :(得分:4)

我会想

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

会工作得很好。

答案 2 :(得分:2)

您的方法更多的是您应该使用原始用户输入执行的操作。但是,既然你正在处理一个函数,那么让它完成繁重工作会容易得多。

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

答案 3 :(得分:1)

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

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

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

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