我正在使用 PHP 7.1.0
我遇到了[PHP手册的字符串章节] [1]
中令人困惑的文字警告写入超出范围的偏移量会填充带有空格的字符串。 非整数类型转换为整数。非法偏移类型发出 的 E_NOTICE 即可。仅使用指定字符串的第一个字符。如 在PHP 7.1.0中,分配一个空字符串会引发致命错误。 以前,它分配了一个NULL字节。
我努力理解上述文本中的条款含义
“仅使用指定字符串的第一个字符。”
和
“从PHP 7.1.0开始,分配一个空字符串会引发致命错误。 以前,它分配了一个NULL字节。“
我完全不理解上述两个陈述中的第一个陈述。
对于第二个陈述,我试图通过实际代码来理解它。所以,为此,我编写了以下代码,但我不确定此代码是否演示了手册中的声明要说的内容。以下是我的代码段。从中,告诉我是否正确理解语句并正确编写代码或不用来演示PHP手册中语句的含义。如果我做错了,请相应地更正我的代码,以符合PHP手册中的陈述。
代码段:
<?php
$rootbeer = 'A & W';
$rootbeer[] = 'N';
?>
PHP 7.1.0中的输出:
Fatal error: Uncaught Error: [] operator not supported for strings in hello.php:3 Stack trace: #0 {main} thrown in hello.php on line 3
PHP 5.6.30输出:
Fatal error: [] operator not supported for strings in hello.php on line 3
从以上两个输出中我看不到 PHP 5.6.30 中的任何地方 NULL byte 被分配给某个东西。与两个版本一样,我得到几乎相同的输出,同样的错误。
请演示 PHP 7.1.0 和PHP 5.6.30 的输出之间的差异。因此,了解差异会更好。
答案 0 :(得分:3)
您没有分配空字符串,也没有使用超出范围的偏移量。我相信你想要尝试的代码如下:
<?php
$rootbeer = 'A & W';
$rootbeer[7] = '';
echo $rootbeer;
这在PHP 5.6中可以正常工作,并输出文档中提到的填充字符串。
在PHP 7.1+中,您将收到警告
PHP警告:无法将空字符串分配给第3行的.filep中的字符串偏移量
并且不会改变字符串。