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

检测到PHP变量不足:FALSE vs NULL vs unset()vs empty()?,php,Php,定义值在PHP中不存在或不足以满足应用程序需要的最佳方法是什么 $var=NULL,$var=array(),$var=FALSE 最好的测试方法是什么 isset($var),空($var),如果($var!=NULL),如果($var) 按原样初始化变量,例如NULL如果是字符串,array()如果是数组,则具有一些好处,因为它们将在所需的设置中运行,而不会产生任何意外结果 e、 g.foreach($emptyArray)不会抱怨它不会输出任何东西,而foreach($false)会抱怨变

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

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

最好的测试方法是什么

isset($var)
空($var)
如果($var!=NULL)
如果($var)

按原样初始化变量,例如
NULL
如果是字符串,
array()
如果是数组,则具有一些好处,因为它们将在所需的设置中运行,而不会产生任何意外结果

e、 g.
foreach($emptyArray)
不会抱怨它不会输出任何东西,而
foreach($false)
会抱怨变量类型错误

但是,有这么多不同的方法来做基本上相同的事情,这就像是一个不必要的麻烦。例如,
if(空($var))
if($var==NULL)


复制:

我的投票选择unset(),因为不存在的变量在使用时会生成通知

测试变得有点复杂,因为如果变量为“notexistings”或null,isset()将为false。(如果你问我的话)

对于$GLOBALS、$\u POST等中的有效值,您可以使用array_key_exists()。
对于类属性,有属性_exists()。

我的投票选择unset(),因为不存在的变量在使用时会生成通知

测试变得有点复杂,因为如果变量为“notexistings”或null,isset()将为false。(如果你问我的话)

对于$GLOBALS、$\u POST等中的有效值,您可以使用array_key_exists()。

对于类属性,有property_exists()。

您命名的每个函数都有不同的用途,应该相应地使用它们:

  • :说明现有变量的值是否为空(0表示数字,空数组表示数组,等于NULL,等等)
  • :告诉脚本是否在变量位于赋值左侧(即$var=3;)之前遇到一行,或者任何其他模糊的方法,例如,或。这是查找是否已设置变量的方法
  • :这很棘手,因为0==NULL。如果您真的想知道变量是否为NULL,那么应该使用triple=:$var===NULL
  • :与$var==NULL相同
就像有用的链接一样

判断变量是否适合您正在编写的脚本的方法完全取决于您的代码,因此没有单一的检查方法

最后一条建议:如果您希望变量是数组,不要等到它被设置在某个地方。相反,先初始化它,然后让代码运行,可能会被新数组覆盖:

// 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){
}

您命名的每个函数都有不同的用途,应相应地使用它们:

  • :说明现有变量的值是否为空(0表示数字,空数组表示数组,等于NULL,等等)
  • :告诉脚本是否在变量位于赋值左侧(即$var=3;)之前遇到一行,或者任何其他模糊的方法,例如,或。这是查找是否已设置变量的方法
  • :这很棘手,因为0==NULL。如果您真的想知道变量是否为NULL,那么应该使用triple=:$var===NULL
  • :与$var==NULL相同
就像有用的链接一样

判断变量是否适合您正在编写的脚本的方法完全取决于您的代码,因此没有单一的检查方法

最后一条建议:如果您希望变量是数组,不要等到它被设置在某个地方。相反,先初始化它,然后让代码运行,可能会被新数组覆盖:

// 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){
}

另一件需要记住的事情是,由于php允许计算为NULL或空,因此有必要使用标识运算符(==,!==请参见)。这就是为什么所有这些比较和相等函数都存在的原因,因为您经常需要区分具有细微差异的值


如果要显式检查NULL,请始终使用$var===NULL

另一件要记住的事情是,由于php允许计算为NULL或空,因此有必要使用标识运算符(==,!==请参阅。这就是为什么所有这些比较和相等函数都存在的原因,因为您经常需要区分具有细微差异的值


如果要显式检查NULL,请始终使用$var==NULL

我不同意,那篇文章没有提到empty()或使用FALSE,也没有提到根据预期用途初始化变量的优点。我不同意,那篇文章没有提到empty()或者使用FALSE,但没有提到根据预期用途初始化变量的优点。一些小的更正:每当变量为FALSE时,empty()也将返回true(不仅是空字符串或空数组);isset()并不完全查找变量赋值,因为变量可以用其他方式设置(提取等);如果($var)在$var既不为NULL、FALSE也不为0时返回true…谢谢!在答案中添加了部分文本。顺便说一句,如果($var)我说它与$var==NULL相同,则在您列出的情况下(NULL、FALSE和0)返回true。一些小的更正:只要变量为FALSE(不仅是空字符串或空数组),empty()也将返回true;isset()并不完全查找变量赋值,因为变量可以通过其他方式设置(提取等);如果($var)在$var既不是NULL、FALSE也不是0时返回true…谢谢!添加了部分tex