php:'0'为空字符串()

lau*_*kok 22 php string integer zero

我想将0视为一个整数,将'0'视为字符串,但是empty()在下面的示例中将'0'视为字符串,

$var = '0';

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is empty';
}
Run Code Online (Sandbox Code Playgroud)

我如何'使'空()将'0'作为字符串?

谢谢.

Jim*_* W. 37

你做不到.这就是它的设计方式.相反,您可以编写一个and语句来测试:

if (empty($var) && $var !== '0') {
    echo $var . ' is empty';
}
Run Code Online (Sandbox Code Playgroud)

你可以使用isset,除非你想让它转过去empty检查的其他空.

编辑

修复了检查以进行类型检查,感谢2371指出了:)

  • `&$ var!='0'`这是错的:PHP中的0 =='0'.使用===. (3认同)
  • 请注意,如果`$ var`未定义,则会出现类似这样的代码的"未定义变量"错误. (2认同)

Gor*_*don 8

你不能用empty.从PHP手册:

以下内容被认为是空的:

  • ""(空字符串)
  • 0(0为整数)
  • "0"(0作为字符串)
  • 空值
  • array()(一个空数组)
  • var $ var; (声明的变量,但在类中没有值)

您必须添加其他额外的支票.


net*_*der 6

你不能只用empty().请参阅手册.你可以这样做:

if ($var !== '0' && empty($var)) {
   echo "$var is empty and is not string '0'";
}
Run Code Online (Sandbox Code Playgroud)

基本上,empty()的作用与:

if (!$var) ...
Run Code Online (Sandbox Code Playgroud)

但是,如果未设置变量,则不会触发PHP Notice.


man*_*706 6

PHP 有不同的函数可以用来测试变量的值。三个有用的函数是isset()empty()is_null()。所有这些函数都返回一个布尔值。如果这些功能没有以正确的方式使用,它们可能会导致意外的结果。

isset() 和 empty() 通常被视为相反的函数,但这并不总是正确的。在这篇文章中,我将解释这些功能之间的区别。

isset()

来自 PHP 手册 – isset()

isset — 确定变量是否已设置且不为 NULL

换句话说,只有当变量不为空时它才返回真。空的()

来自 PHP 手册 – empty()

empty - 确定变量是否为空

换句话说,如果变量是空字符串、false、array()、NULL、“0?、0 和未设置的变量,它将返回 true。一片空白()

来自 PHP 手册 – is_null()

is_null — 查找变量是否为 NULL

换句话说,只有当变量为空时它才返回真。is_null() 与isset() 相反,不同之处在于isset() 可以应用于未知变量,而is_null() 只能应用于声明的变量。

图中的表格是这些函数针对不同值返回的内容的简单参考。空格表示函数返回bool (false)。

在此处输入图片说明

我还制作了一个用于检查所有内容的自定义函数:

function checkEmpty($var, $term = ""){
    if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){
        return true;
    }
    else{
        if($term != ""){
            return array("status" => "error", "desc" => "$term can not be empty");
        }
        else{
            return array("status" => "error", "desc" => "value can not be empty");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)