2009-04-09 39 views
22

可能重复:
Fixing the PHP empty functionPHP:什么是空()的替代,其中字符串“0”不被视为空?

在PHP中,空()是一个伟大的快捷方式,因为它可以让你检查变量是否定义,并在同一时间不是空的。

当你不想让“0”(作为字符串)被认为是空的,但你仍然希望将false,null,0和“”视为空时,你会使用什么?

也就是说,我只是想知道,如果你有自己的快捷方式是:

if (isset($myvariable) && $myvariable != "") ;// do something 
if (isset($othervar ) && $othervar != "") ;// do something 
if (isset($anothervar) && $anothervar != "") ;// do something 
// and so on, and so on 

我不认为我可以定义为这样的辅助函数,因为变量可能是不确定的(和因此不能作为参数传递)。

+0

我想我现在认识到,没有解决方案 - 至少没有一个能够缩短代码长度。 – thomasrutter 2009-04-17 15:03:35

+0

嗯..赞同你 – mysqllearner 2010-02-08 09:14:24

回答

1

答案就是不可能缩短我已有的东西。 ()或isset()在检查值之前需要检查是否是空的()或者isset(),并且你不能检查是否有东西是空的()或函数内的isset()。 ($ var!

3
 
if ((isset($var) && $var === "0") || !empty($var)) 
{ 

} 

这样你会进入,如果变量被设置且是 “0”,或者变量被设置,而不是= NULL( “0”,空,假)

+0

这看起来相当正确;它不是真正的if(isset($ myvariable)&& $ myvariable!=“”)的快捷方式,因为它更长。感谢你的回答。 – thomasrutter 2009-04-11 13:57:32

21

这IF-构建应该做你想做的事:

function notempty($var) { 
    return ($var==="0"||$var); 
} 

编辑:我猜表格只能在预览中工作,而不是在实际的答案提交。所以请参考PHP type comparison tables了解更多信息。

 
notempty("")  : false 
notempty(null)  : false 
notempty(undefined): false 
notempty(array()) : false 
notempty(false) : false 
notempty(true)  : true 
notempty(1)  : true 
notempty(0)  : false 
notempty(-1)  : true 
notempty("1")  : true 
notempty("0")  : true 
notempty("php") : true 

基本上,notempty()是相同!空()对于除所有值 “0”,为此,它返回真


编辑:如果您使用 error_reporting(E_ALL),您将无法通过值将未定义的变量传递给自定义函数。正如mercator指出的那样,您应该始终使用 使用 E_ALL以符合最佳做法。他提供的 This link(评论#11)讨论了为什么不应该为了性能和可维护性/调试原因而使用任何形式的错误抑制。

有关如何将参数传递给自定义函数的信息,请参阅orlandu63的答案by reference

+2

当变量未定义时会失败。 – mercator 2009-04-09 07:41:48

+0

你是什么意思?如果传递一个未定义的变量,函数返回false - 这与empty()返回的结果相反:http://us2.php.net/manual/en/types.comparisons.php这是所需的行为。 – Calvin 2009-04-09 09:57:39

+1

它不会失败,但会产生警告。所以,虽然它确实有效,但它不是正确的方法(tm)。在使用=== – 2009-04-09 16:45:10

0
if(isset($var) && ($var === '0' || !empty($var))) 
{ 
} 
0
function Void($var) 
{ 
    if (empty($var) === true) 
    { 
     if (($var === 0) || ($var === '0')) 
     { 
      return false; 
     } 

     return true; 
    } 

    return false; 
} 
9
function isempty(&$var) { 
    return empty($var) || $var === '0'; 
} 

的关键是&运算符,它由reference经过可变,则创建一个如果它不存在它。

0

If($ var!= null)

相关问题