Php 为什么要存储空字符串而不是null?

Php 为什么要存储空字符串而不是null?,php,string,null,is-empty,Php,String,Null,Is Empty,是否有使用空字符串而不是null的情况?我正在寻找任何您希望使用空字符串而不是使用null 我从HTTP堆栈的角度考虑这一点,例如在php中,带有查询字符串的请求看起来会被解释为空字符串 var_dump($_GET['key']); 字符串(0)” 对于我有限的想象力所能想到的每一个用例,都应该将其转换为null,那么为什么有人需要将“存储在数据库字段或类似的地方呢?就数据库而言,空字符串和null值是两件不同的事情。您可以将它们区分开来,并具体地相互询问。作为一种弱类型语言,PHP倾向于模

是否有使用空字符串而不是
null
的情况?我正在寻找任何您希望使用空字符串而不是使用
null

我从HTTP堆栈的角度考虑这一点,例如在php中,带有查询字符串的请求看起来会被解释为空字符串

var_dump($_GET['key']);
字符串(0)”


对于我有限的想象力所能想到的每一个用例,都应该将其转换为
null
,那么为什么有人需要将
存储在数据库字段或类似的地方呢?

就数据库而言,空字符串和null值是两件不同的事情。您可以将它们区分开来,并具体地相互询问。作为一种弱类型语言,PHP倾向于模糊界限,但这并不意味着在软件生态系统中到处都是这种情况


另一方面,php的主要用途之一是处理http表单值,这些值本质上都是字符串类型。也许这也没用。

就数据库而言,空字符串和空值是两件不同的事情。您可以将它们区分开来,并具体地相互询问。作为一种弱类型语言,PHP倾向于模糊界限,但这并不意味着在软件生态系统中到处都是这种情况


另一方面,php的主要用途之一是处理http表单值,这些值本质上都是字符串类型。也许这也没用。

空的概念用来表示未知的值。这在数据库上下文中更容易理解,在数据库上下文中一次插入一整行。值未知的字段初始化为
NULL

支持该概念的编程语言通常使用
NULL
作为未初始化变量的值。这种用法将对
NULL
的一般看法转变为“未设置”。事实上,
NULL
在这个上下文中的语义也是“未知的”

空字符串(
'
)是另一回事。它表示字符串中缺少任何字符。这并不意味着(字符串类型)的值未知;它是已知的:它是空的。使用它而不是
NULL
是一个逻辑错误


在HTTP
GET
请求的上下文中,其URL为
https://example.com/something?key=
,由PHP脚本处理,
$\u GET['key']
'
(空字符串)。值已知,URL中存在
变量,其值为空字符串。但是
$\u GET['foo']
被PHP正确地评估为
NULL
。这个值根本不知道。它不是空字符串;它可以是任何值,但由于它不是在URL中发送的,因此我们无法知道它。

空的概念用于表示未知的值。这在数据库上下文中更容易理解,在数据库上下文中一次插入一整行。值未知的字段初始化为
NULL

支持该概念的编程语言通常使用
NULL
作为未初始化变量的值。这种用法将对
NULL
的一般看法转变为“未设置”。事实上,
NULL
在这个上下文中的语义也是“未知的”

空字符串(
'
)是另一回事。它表示字符串中缺少任何字符。这并不意味着(字符串类型)的值未知;它是已知的:它是空的。使用它而不是
NULL
是一个逻辑错误


在HTTP
GET
请求的上下文中,其URL为
https://example.com/something?key=
,由PHP脚本处理,
$\u GET['key']
'
(空字符串)。值已知,URL中存在
变量,其值为空字符串。但是
$\u GET['foo']
被PHP正确地评估为
NULL
。这个值根本不知道。它不是空字符串;它可以是任何值,但由于它不是在URL中发送的,我们无法知道它。

这一定是Oracle在定义其DBMS时问自己的问题;)可能的重复项您可以看到它,就好像列具有
null
,它根本没有被设置,而如果它包含字符串,则它已被设置,但没有任何内容。例如,通过这种方式,您可以查看字段是否已更新或是否仍具有原始值(null)。这只是一个用例。还有很多。我可以看到的一个场景是,如果您有一个模型,并且在需要时懒洋洋地加载数据,那么您可以使用
isset($name)$名称:$model->load('name')
如果它已经被加载并且是空的,为了避免多次重新加载,它必须是
string(0)”“
而不是
NULL
。(缓存将是我实际看到这种情况发生的主要场景)这一定是Oracle在定义其DBMS时问自己的问题;)可能的重复项您可以看到它,就好像列具有
null
,它根本没有被设置,而如果它包含字符串,则它已被设置,但没有任何内容。例如,通过这种方式,您可以查看字段是否已更新或是否仍具有原始值(null)。这只是一个用例。还有很多。我可以看到的一个场景是,如果您有一个模型,并且在需要时懒洋洋地加载数据,那么您可以使用
isset($name)$名称:$model->load('name')
如果它已经被加载并且是空的,为了避免多次重新加载,它必须是
string(0)”“
而不是
NULL
。(缓存将是我实际看到这种情况发生的主要场景)
null和空str