null和empty有什么区别?

时间:2011-04-11 00:38:10

标签: php null isset

我对empty和null的概念不熟悉。虽然我努力了解它们之间的区别,但我更加困惑。我在http://www.tutorialarena.com/blog/php-isset-vs-empty.php发现了一篇文章但是我仍然没有看到在验证表单时何时使用isset和empty。看到我没有掌握差异,我不想使用不正确的功能,也不能使用其他区域的功能。有人可以提供一些有助于我理解的例子吗?我对编码很陌生,所以如果有人能给我真实世界的例子,同时保持它足以让noob跟随它,我将不胜感激。

9 个答案:

答案 0 :(得分:18)

如果变量没有值,则变量为NULL,并且在内存中指向无处。

empty()更像是 empty 的字面含义,例如字符串""为空,但不是 NULL

  

考虑以下事项   是空的:

     
      
  • “”(空字符串)
  •   
  • 0(0为整数)
  •   
  • 0.0(0作为浮动)
  •   
  • “0”(0作为字符串)
  •   
  • NULL
  •   
  • FALSE
  •   
  • array()(空数组)
  •   
  • var $ var; (声明的变量,但在类中没有值)
  •   

Source


实施例

$aNULL

$a = '' 为空,但不是NULL


更新

  

如果$a=''为空但不是NULL,我何时使用empty()功能以及何时使用isset()功能。

isset()将返回FALSE变量指向NULL

当您了解为空的时使用empty()(请查看上面的列表)。

  

另外当你说它在记忆中没有任何意义时,这究竟意味着什么?

这意味着$str = ''将作为长度为0的字符串存储在内存中。

如果是$str = NULL,它就不会占用任何记忆。

答案 1 :(得分:7)

Null 是占位符,通常表示“没有关于此的数据可用”。

对此使用null只是一种约定,但是相当普遍,只是某些编程语言直接支持约定。这个惯例存在的原因在于IMHO历史上与“指针”有关; 很多时候会定义一个过程来返回一个指向答案的指针,并且如果由于某种原因无法产生答案,它将返回传统上称为Null指针的东西。

表示(如果这是一组)它没有成员。这是一个明确的答案,它与“没有关于此的数据可用”非常不同。

在PHP世界中,显然未初始化的变量具有Null值,并且在此类变量上的isset返回FALSE。 对于数组和字符串,PHP遵循“空”意味着“没有成员”的约定,尽管数组和字符串在技术上不是设置的。

通过PHP设计,PHP显然有这个有趣的想法0和0.0也是“空的”。这是滥用“空”恕我直言的概念:个别数字不是集合,所以0不能合理地“空”。这只是导致模糊的编程,因为它违反了最不惊讶的原则。我确信PHP设计师会将“零是空数”视为某种模糊的类比;但是,如果类比是模糊的,为什么还要烦恼呢?但是PHP充满了愚蠢的想法。

答案 2 :(得分:4)

下表是这些函数将针对不同值返回的简单参考。空格表示函数返回bool(false)。 enter image description here

请参阅此链接以获取更多https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

答案 3 :(得分:1)

NULL是一个特殊值,它明确指出该变量尚未设置为任何值。使用empty()函数要小心,因为您不能仅使用它来确定变量是否为NULL。例如,如果int设置为0,则empty()函数将返回true。如果您需要确保变量完全NULL,请使用if($variable == NULL)

有关empty()的更多信息,请参阅http://php.net/manual/en/function.empty.php

答案 4 :(得分:1)

这里有一些好的答案,我不再重复了。但是,在验证表单的情况下,当提交表单时,每个表单输入元素的值将在$_POST变量中发送到服务器。您可以使用isset()来检查特定输入的存在。

isset($_POST['username'])

如果返回true,则对服务器的此请求是发布包含名为“username”的输入元素的表单的结果。现在我们知道我们有一个表单元素的值,我们可以看到它是否具有有效值。 empty()会告诉我们用户是否在字段中输入了任何数据,或者是否将其留空。

empty($_POST['username'])

如果返回true,则提交给服务器的表单有一个名为“username”的字段,但用户在提交表单之前没有输入任何内容。

答案 5 :(得分:0)

因为我使用PHP已经有一段时间了,但是如果其他语言是空的,则表示现有的没有内容的对象/地图/数组,而null表示根本没有含义/定义的变量(未初始化)。

在数据库SQL中,NULL表示“无值”。

答案 6 :(得分:0)

empty()是查看变量是否包含任何有用信息的快速方法...对于字符串empty(),对于字符串“”以及空字符串返回true。

所以你可以这样写:

if (! empty($name)) echo $name;

更多信息,请参阅此处:PHP: empty()

答案 7 :(得分:0)

如果满足以下两个条件,

isset()将返回true:

  1. 已定义变量且尚未取消设置。
  2. 变量中包含非空值。
  3. 当变量设置为某个变量(包括null)时,会自动定义变量。这对数组有直接影响。

    $a=array();
    $a['randomKey']=true;
    $a['nullKey']=null;
    var_dump(isset($a['randomKey'])); // true
    var_dump(isset($a['nullKey'])); // true, the key has been set, set to null!
    var_dump(isset($a['unsetKey'])); // false !
    unset($a['randomKey']);
    var_dump(isset($a['randomKey'])); // false ! it's been unset!
    

    从上面,您可以检查是否已设置了各种$ _POST字段。例如,已经过帐的页面,按理说,在$ _POST字段中具有提交按钮名称。

    另一方面,

    empty()测试变量是否保持非零值。这意味着(int)强制转换为0的值也返回false。您可以使用它来查看特定的$ _POST字段中是否包含数据。

答案 8 :(得分:0)

从数学上可以更好地理解这个概念。您是否曾尝试使用计算器(如7/0)将数字(非零)除以0?您将得到一个看起来像这样的结果:undefinednot a numbernull等。这意味着由于某些原因操作是不可能的(让我们留下这些理由另一天讨论。)

现在,执行:0/7。你将获得输出,这意味着操作是可能的并且可以执行,但你的答案只是0,因为除法后没有剩下任何东西。有一个有效的输出,输出为零。

在第一个示例中,不仅输出无效,而且无法执行操作。这类似于null。第二个例子类似于empty