11

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

4

9 回答 9

18

一个变量是NULL如果它没有值,并且指向内存中的任何地方。

empty()更多的是空的字面意思,例如字符串""是空的,但不是 NULL

以下内容被认为是空的:

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

来源


例子

$aNULL

$a = ''的,但不是NULL


更新

如果$a=''为空但不是NULL,我什么时候使用这个empty()函数,什么时候使用这个isset()函数。

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

empty()当您了解什么是的时使用(查看上面的列表)。

另外,当您说它在内存中没有任何意义时,这到底是什么意思?

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

如果是$str = NULL,它不会占用任何内存。

于 2011-04-11T00:42:08.033 回答
7

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

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

意味着(如果这是一个集合)它没有成员。这是一个明确的答案,它与“没有可用的数据”非常不同。

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

PHP 显然有一个有趣的想法,即 0 和 0.0 也是“空”的,这是 PHP 设计的。这是对“空”恕我直言的概念的滥用:个别数字不是集合,因此 0 不能合理地通过“空”。这只会导致晦涩的编程,因为它违反了最小意外原则。我敢肯定 PHP 设计者会将“零是空数”作为某种模糊的类比;但是如果类比是模糊的,为什么要费心呢?但是 PHP 充满了愚蠢的想法。

于 2011-04-11T00:41:09.730 回答
6

下表是这些函数针对不同值返回的内容的简单参考。空格表示函数返回 bool(false)。 在此处输入图像描述

有关更多信息,请参阅此链接 https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/

于 2015-02-17T07:08:20.197 回答
1

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

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

于 2011-04-11T00:44:29.767 回答
1

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

isset($_POST['username'])

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

empty($_POST['username'])

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

于 2011-04-11T00:52:16.137 回答
0

自从我使用 PHP 以来已经有一段时间了,但是如果其他语言是空的,则表示现有的对象/映射/数组没有内容,而 null 表示完全没有意义/定义的变量(未初始化)。

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

于 2011-04-11T00:43:33.447 回答
0

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

所以你可以这样写:

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

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

于 2011-04-11T00:45:11.457 回答
0

isset()如果满足这两个条件,则返回 true:

  1. 该变量已定义且尚未取消设置。
  2. 变量中有一个非空值。

当变量被设置为某个值(包括 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 字段中是否包含数据。

于 2011-04-11T00:45:13.710 回答
0

从数学中可以更好地理解这个概念。您是否曾尝试使用计算器(例如 7/0)将数字(不是零)除以 0?你会得到一个看起来像这样的结果:undefined,not a numbernull。这意味着由于某些原因无法进行操作(让我们改天讨论这些原因)。

现在,执行此操作:0/7。您将得到输出 0。这意味着该操作是可能的并且可以执行,但您的答案只是 0,因为除法之后什么都没有。有一个有效的输出并且该输出为零。

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

于 2017-11-02T17:03:18.500 回答