检测PHP变量不足:FALSE vs NULL vs unset()vs empty()?

时间:2009-03-21 15:44:30

标签: php

定义PHP中不存在某个值的最佳方法是什么,或者不足以满足应用程序的需要。

$var = NULL$var = array()$var = FALSE

最好的测试方法是什么?

isset($var)empty($var)if($var != NULL)if($var)

将变量初始化为它们将是什么,例如NULL如果字符串array(),如果它们是数组,则具有一些好处,因为它们将在它们所处的设置中起作用而没有任何意外结果。

e.g。 foreach($emptyArray)不会抱怨它不会输出任何内容,而foreach($false)会抱怨错误的变量类型。

但它有点不必要的麻烦,有很多不同的方式做基本相同的事情。例如。 if(empty($var))if ($var == NULL)

<小时/> 重复: Best way to test for a variable’s existence in PHP; isset() is clearly broken

3 个答案:

答案 0 :(得分:8)

您命名的每个函数用于不同目的,应相应地使用它们:

  • empty :告诉现有变量是否具有可被视为空的值(数字为0,数组为空数组,等于NULL等)。
  • isset($var) :告诉脚本在变量是作业的左侧(即$ var = 3;)或任何其他模糊方法(例如{)之前遇到一行。 {3}},extractlist。这是 查找变量是否已设置的方法。
  • eval :这很棘手,因为0 == NULL。如果你真的想知道一个变量是否为NULL,你应该使用triple =:$ var === NULL。
  • $var == NULL :与$ var == NULL相同。

有用的链接是if($var)

判断变量是否适合您正在编码的脚本的方法将完全取决于您的代码,因此无法单独检查它。

最后一条建议:如果您希望变量是一个数组,请不要等待它在某处设置。相反,事先初始化它,然后让你的代码运行,也许它会被新数组覆盖:

// Initialize the variable, so we always get an array in this variable without worrying about other code.
$var = array();

if(some_weird_condition){
  $var = array(1, 2, 3);
}

// Will work every time.
foreach($var as $key => $value){
}

答案 1 :(得分:1)

要记住的另一件事是,由于php在允许评估为NULL或为空的情况下是自由的,因此必须使用身份运算符(===,!== see http://php.net/operators.comparison。这就是原因为什么所有这些比较和相等函数都存在,因为你经常需要区分具有细微差别的值。

如果明确检查NULL,请始终使用$ var === NULL

答案 2 :(得分:-1)

我的投票取决于unset(),因为非现有变量在使用时应该生成通知。

测试变得有点复杂,因为如果变量“不存在”或null,则isset()将为false。 (如果你问我,语言设计就会变弱)

你可以在$ GLOBALS,$ _POST等中使用array_key_exists()作为valiables。
对于类属性,有property_exists()。