【发布时间】:2019-04-19 20:30:23
【问题描述】:
调试遗留代码,我遇到了一个奇怪的问题。遗留代码正在移至 PHP 7.2。我不知道它最初是为哪个版本的 PHP 编写的,但它确实适用于 PHP 5.6。
下面是我的问题示例...
$variable = '';
$variable['key'] = 'Hello World!';
echo $variable['key'] // H
当我回显$variable['key'] 时,它只会从值中获取第一个字符。我现在知道这是因为 $variable 最初被声明为字符串。
但是为什么这在 PHP 5.6 中有效呢?我可以做些什么来在 7.2 中完成这项工作而无需翻阅数千行代码?
有没有像strict_types 这样的指令我可以使用?
【问题讨论】:
-
对于任何对不同 PHP 版本的输出感到好奇的人:3v4l.org/Q8iiY
-
这是因为字符串
'key'被视为整数时变为0- 因为$variable是一个字符串你正在做的是'Hello World'[0]...这是H -
^^^ 所以删除
$variable = '';或做$variable = []; -
在我有限的搜索中找不到任何关于此行为的参考,但您可能只想修复所有错误代码——希望您的项目不会太大。无论哪种方式,这都是不正确的语法,不太确定为什么 PHP 5 会这样,除了:PHP。也找不到任何相关的 php.ini 设置。
-
不幸的是,
phpstan不考虑这个坏代码。所以我也看不到自动解决这些问题的好方法。
标签: php php-5.6 legacy-code php-7.2