我对空和空的概念不熟悉。虽然我努力理解它们之间的区别,但我更加困惑。我在http://www.tutorialarena.com/blog/php-isset-vs-empty.php看到了一篇文章,但是我仍然看不到在验证表单时何时使用 isset 和 empty。看到我没有掌握区别,我不想使用不正确的功能以及无法使用其他区域的功能。有人可以举一些例子来帮助我理解吗?我对编码很陌生,所以如果有人能给我真实世界的例子,同时保持它足够简单,让菜鸟学习,我将不胜感激。
9 回答
一个变量是NULL
如果它没有值,并且指向内存中的任何地方。
empty()
更多的是空的字面意思,例如字符串""
是空的,但不是 NULL
。
以下内容被认为是空的:
- ""(一个空字符串)
- 0(0 为整数)
- 0.0(0 作为浮点数)
- "0" (0 作为字符串)
- 空值
- 错误的
- array() (一个空数组)
- 变量$变量;(声明的变量,但在类中没有值)
来源。
例子
$a
是NULL
。
$a = ''
是空的,但不是NULL
。
更新
如果
$a=''
为空但不是NULL
,我什么时候使用这个empty()
函数,什么时候使用这个isset()
函数。
isset()
将返回FALSE
变量指向NULL
.
empty()
当您了解什么是空的时使用(查看上面的列表)。
另外,当您说它在内存中没有任何意义时,这到底是什么意思?
这意味着$str = ''
它将作为长度为 0 的字符串在内存中。
如果是$str = NULL
,它不会占用任何内存。
Null是一个占位符,通常表示“没有可用的相关数据”。
对此使用 null 只是一种约定,但却是一种相当普遍的约定,以至于某些编程语言直接支持该约定。这个约定存在的原因在历史上与“指针”有关;很多时候,一个过程将被定义为返回一个指向答案的指针,如果由于某种原因它无法产生答案,它将返回传统上称为 Null 的指针。
空意味着(如果这是一个集合)它没有成员。这是一个明确的答案,它与“没有可用的数据”非常不同。
在 PHP 世界中,显然未初始化的变量具有 Null 值,并且此类变量上的 isset 返回 FALSE。对于数组和字符串,PHP 遵循“空”表示“没有成员”的约定,尽管数组和字符串在技术上不是集合。
PHP 显然有一个有趣的想法,即 0 和 0.0 也是“空”的,这是 PHP 设计的。这是对“空”恕我直言的概念的滥用:个别数字不是集合,因此 0 不能合理地通过“空”。这只会导致晦涩的编程,因为它违反了最小意外原则。我敢肯定 PHP 设计者会将“零是空数”作为某种模糊的类比;但是如果类比是模糊的,为什么要费心呢?但是 PHP 充满了愚蠢的想法。
下表是这些函数针对不同值返回的内容的简单参考。空格表示函数返回 bool(false)。
有关更多信息,请参阅此链接 https://www.virendrachandak.com/techtalk/php-isset-vs-empty-vs-is_null/
NULL 是一个特殊值,它明确指出该变量尚未设置为任何值。使用该函数时要小心,empty()
因为您不能仅使用它来确定变量是否为 NULL。例如,empty()
如果 int 设置为 0,该函数将返回 true。如果您需要确保变量完全是NULL
use if($variable == NULL)
。
有关更多信息,empty()
请参阅http://php.net/manual/en/function.empty.php
这里有一些很好的答案,我不再赘述。但是,在验证表单的情况下,当提交表单时,每个表单输入元素的值都会在$_POST
变量中发送到服务器。您可以使用 来检查特定输入是否存在isset()
。
isset($_POST['username'])
如果返回 true,那么对服务器的请求是发布包含名为“用户名”的输入元素的表单的结果。现在我们知道我们有该表单元素的值,我们可以查看它是否具有有效值。 empty()
将告诉我们用户是否在字段中实际输入了任何数据,或者他们是否将其留空。
empty($_POST['username'])
如果返回 true,则提交给服务器的表单有一个名为“用户名”的字段,但用户在提交表单之前没有输入任何内容。
自从我使用 PHP 以来已经有一段时间了,但是如果其他语言是空的,则表示现有的对象/映射/数组没有内容,而 null 表示完全没有意义/定义的变量(未初始化)。
在数据库 SQL 中,NULL 表示“没有值”。
这empty()
是查看变量是否包含任何有用信息的一种很好的快速方法......对于字符串,empty()
对于字符串“”以及空字符串返回 true。
所以你可以这样写:
if (! empty($name)) echo $name;
更多信息请参见此处:PHP:empty()
isset()
如果满足这两个条件,则返回 true:
- 该变量已定义且尚未取消设置。
- 变量中有一个非空值。
当变量被设置为某个值(包括 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 字段中是否包含数据。
从数学中可以更好地理解这个概念。您是否曾尝试使用计算器(例如 7/0)将数字(不是零)除以 0?你会得到一个看起来像这样的结果:undefined
,not a number
等null
。这意味着由于某些原因无法进行操作(让我们改天讨论这些原因)。
现在,执行此操作:0/7。您将得到输出 0。这意味着该操作是可能的并且可以执行,但您的答案只是 0,因为除法之后什么都没有。有一个有效的输出并且该输出为零。
在第一个示例中,不仅输出无效,操作也无法执行。这类似于null
. 第二个例子类似于empty
.