Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 空和空之间有什么区别?_Php_Null_Isset - Fatal编程技术网

Php 空和空之间有什么区别?

Php 空和空之间有什么区别?,php,null,isset,Php,Null,Isset,我不熟悉空和空的概念。虽然我努力理解它们之间的区别,但我更困惑。我在上看到一篇文章,但我仍然不知道在验证表单时何时使用isset和empty。鉴于我没有理解其中的区别,我不想使用不正确的函数,也不想在其他领域使用这些函数。有人能举例帮助我理解吗?我对编码非常陌生,因此如果有人能给我提供真实世界的示例,同时让noob能够理解,我将不胜感激。Null是一个占位符,通常意味着“没有关于这方面的数据可用” 在这方面使用null只是一种约定,但却是一种相当普遍的约定,以至于有些编程语言直接支持该约定。这个

我不熟悉空和空的概念。虽然我努力理解它们之间的区别,但我更困惑。我在上看到一篇文章,但我仍然不知道在验证表单时何时使用isset和empty。鉴于我没有理解其中的区别,我不想使用不正确的函数,也不想在其他领域使用这些函数。有人能举例帮助我理解吗?我对编码非常陌生,因此如果有人能给我提供真实世界的示例,同时让noob能够理解,我将不胜感激。

Null是一个占位符,通常意味着“没有关于这方面的数据可用”

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

空表示(如果这是一个集合)它没有成员。这是一个明确的答案,与“没有关于这方面的数据”截然不同

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


PHP显然有一个有趣的想法,即通过PHP设计,0和0.0也是“空的”。这是对“空”概念的滥用:单个数字不是集合,所以0不能合理地用“空”来表示。这只会导致晦涩难懂的编程,因为它违反了最小意外的原则。我相信PHP设计者会认为“零是空数字”是一种模糊的类比;但是,如果类比是模糊的,为什么还要费心去做呢?但是PHP充满了愚蠢的想法。

如果变量没有值,并且指向内存中的任何地方,那么它就是
NULL

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

以下事项被认为是 空的:

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


例子
$a
NULL

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


更新 如果
$a=''
为空但不为
NULL
,则何时使用
empty()
函数以及何时使用
isset()
函数

如果变量指向
NULL
,则返回
FALSE

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

还有,当你说它在记忆中没有指向任何地方时,那到底是什么意思

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


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

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


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

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

有关
empty()
的详细信息,请参见,
empty()
是查看变量是否包含任何有用信息的一种快速方法。。。这对于字符串
empty()
对于“”字符串和空字符串返回true

所以你可以这样写:

if (! empty($name)) echo $name;
更多信息请参见此处:

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!
    
    从上面,您可以检查是否设置了各种$\u POST字段。例如,一个已经发布到的页面,在$\u POST字段中有提交按钮名称


    empty()
    另一方面,测试变量是否持有非零值。这意味着(int)转换为0的值也返回false。您可以使用它来查看特定的$\u POST字段中是否包含数据。

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

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

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