我对empty和null的概念不熟悉。虽然我努力了解它们之间的区别,但我更加困惑。我在http://www.tutorialarena.com/blog/php-isset-vs-empty.php发现了一篇文章但是我仍然没有看到在验证表单时何时使用isset和empty。看到我没有掌握差异,我不想使用不正确的功能,也不能使用其他区域的功能。有人可以提供一些有助于我理解的例子吗?我对编码很陌生,所以如果有人能给我真实世界的例子,同时保持它足以让noob跟随它,我将不胜感激。
答案 0 :(得分:18)
如果变量没有值,则变量为NULL
,并且在内存中指向无处。
empty()
更像是 empty 的字面含义,例如字符串""
为空,但不是 NULL
。
考虑以下事项 是空的:
- “”(空字符串)
- 0(0为整数)
- 0.0(0作为浮动)
- “0”(0作为字符串)
- NULL
- FALSE
- array()(空数组)
- var $ var; (声明的变量,但在类中没有值)
$a
是NULL
。
$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)。
请参阅此链接以获取更多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:
当变量设置为某个变量(包括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?您将得到一个看起来像这样的结果:undefined
,not a number
,null
等。这意味着由于某些原因操作是不可能的(让我们留下这些理由另一天讨论。)
现在,执行:0/7。你将获得输出,这意味着操作是可能的并且可以执行,但你的答案只是0,因为除法后没有剩下任何东西。有一个有效的输出,输出为零。
在第一个示例中,不仅输出无效,而且无法执行操作。这类似于null
。第二个例子类似于empty
。