是否有使用空字符串而不是null
的情况?我正在寻找任何要使用空字符串而不是使用null
我正在用http堆栈来思考这个问题,例如,在php中,一个带有查询字符串的请求,看起来像https://example.com/something?keykey =将被解释为一个空字符串。
var_dump($_GET['key']);
字符串(0)"
对于每种用例,我的想象力都可以构想,这应该始终转换为null
,那么为什么有人需要将""
存储在数据库字段中或类似的内容?
NULL
的概念用于表示未知的值。这更容易在数据库上下文中掌握,在该上下文中,一次将整个行插入数据库中。使用NULL
初始化值的字段。
支持该概念的编程语言通常使用NULL
作为非初始化变量的值。这种用法将NULL
的一般感知转移到了" not set" 的想法。实际上,在这种情况下,NULL
的语义也是"未知" 。
一个空字符串(''
)是另一回事。它表示字符串中没有任何字符。这并不意味着(类型字符串)的值不知道;已知:它是空的。使用它代替NULL
是逻辑错误。
在HTTP GET
的上下文中,其URL为https://example.com/something?key=
,由PHP脚本处理,$_GET['key']
为''
(空字符串)。该值已知,key
变量存在于URL中,其值是空字符串。但是$_GET['foo']
由PHP正确评估为NULL
。该值根本不知道。它不是空字符串;它可以是任何值
当有关数据库时,一个空字符串和空值是两个不同的事情。您可以分开告诉他们并特别查询。作为一种弱打字的语言,PHP倾向于模糊行,但这并不意味着软件生态系统中的任何地方。
另一方面,PHP的主要用途之一是处理HTTP形式值,而HTTP形式值本质上都是类型字符串。也许这也无济于事。