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

时间:2017-09-15 18:46:11

标签: php string null is-empty

是否有使用空字符串而不是my $source_files = shift; 的情况?我正在寻找您想要使用空字符串而不是使用my $source_files = (@_);

的任何域或业务环境

我在HTTP堆栈方面正在思考这个问题,例如在php中,带有看起来像https://example.com/something?key=的查询字符串的请求将被解释为空字符串。

null
  

string(0)“”

对于我有限的想象力可以设想的每个用例,这应该总是转换为null,那么为什么有人需要将var_dump($_GET['key']); 存储在数据库字段或类似的东西中?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

就数据库而言,空字符串和NULL值是两个不同的东西。您可以区分它们并相互查询。作为一种弱类型的语言,PHP往往会模糊这条线,但这并不意味着软件生态系统中无处不在。

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