PHP7 在 null/empty 字符串上的 substr() 行为

PHP7's substr() behavior on null/empty strings

我正在阅读 substr() 的 PHP 手册,其中对输入字符串参数的说明如下:

string

The input string. Must be one character or longer.

但在示例部分的页面下方,这是示例之一:

// ...
echo "6) ".var_export(substr("", 0, 1), true).PHP_EOL;
// ...

这显然与要求 一个字符或更长 的输入字符串规范相矛盾。该页面声明上面的输出将是 6) ''.

来自 C/C++ 背景,我对 UB 非常小心,所以我想知道是否将 NULL"" 传递给 substr()合法吗?

通常,您应该随意使用 PHP 手册语句,尤其是对于完善的核心语言功能。这是一个演示,物有所值。

https://3v4l.org/8RKbG

IMO,空字符串应该没问题(当前的实现受到保护,我认为短期内不会发生变化)。在调用 substr() 之前清除空字符串当然没有任何坏处。

然而,空值似乎会在 HHVM 下(并且仅在该处)触发警告,这很有趣。但这个事实的相关性完全取决于你。