【发布时间】:2018-07-26 00:32:40
【问题描述】:
实际上,我正在将一个更大的项目从 PHP 5.3.3 迁移到 PHP 7.1.13。在旧版本的 PHP 中,可以编写以下访问变量变量的代码:
class MyClass {};
$myVar = array("hello","world");
$myClass = new MyClass();
$myClass->$myVar[0] = "test 0"; // sets "test 0" to $myClass->hello
$myClass->$myVar[1] = "test 1"; // sets "test 1" to $myClass->world
print_r($myClass);
这表明:
MyClass Object
(
[hello] => test 0
[world] => test 1
)
在 PHP 7 中使用相同的代码:
MyClass Object
(
[Array] => Array
(
[0] => test 0
[1] => test 1
)
)
在 PHP 7 中我发现,我必须使用这种方式来获得相同的结果:
$myClass->{$myVar[0]} = "test 0";
$myClass->{$myVar[1]} = "test 1";
我在文档中发现 php5 和 php7 以不同的方式解释这一点:http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect
是否有机会保留旧代码,或者我必须重新编码它的每一个外观?也许一些 php.ini 设置或类似的东西?你有什么想法吗?
【问题讨论】:
-
你应该解决你的 PHP 问题而不是规避它们。
-
@Scriptman:这将是最好的方法,但我只需要一些快速和肮脏的...