问题
为什么这个代码在php5.6和php7.0中运行会产生不同的结果?
背景
我有以下代码:
<?php
$assoc_array = [
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4
];
$index_array = ['a','b','c','d'];
$object = new \StdClass;
foreach($index_array as $item) {
$object->$assoc_array[$item] = "";
}
print_r($object);
当我在ubuntu 17.4,apache 2.4.25,php 7.0中运行它时,我得到了这个:
Notice: Array to string conversion in /var/www/html/file.php on line 12
Notice: Array to string conversion in /var/www/html/file.php on line 12
Notice: Array to string conversion in /var/www/html/file.php on line 12
Notice: Array to string conversion in /var/www/html/file.php on line 12
stdClass Object (
[Array] => Array (
[a] =>
[b] =>
[c] =>
[d] =>
)
)
当我在相同的环境中运行它,但切换到php 5.6时,我明白了:
stdClass Object (
[1] =>
[2] =>
[3] =>
[4] =>
)
这并没有破坏我的代码,我只是真的挂断了为什么它不同而且没有从哪里开始我的研究。
NB。这是我在这里感兴趣的对象,而不是通知 - 两者都有错误报告。
答案 0 :(得分:1)
您无法在PHP7中执行此操作:$object->$assoc_array[$item] = "";
如您所见,您会收到通知,请用以下代码替换您的代码:
<?php
$assoc_array = [
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4
];
$index_array = ['a','b','c','d'];
$object = new \StdClass;
foreach($index_array as $item) {
$object->{$assoc_array[$item]} = "";
}
print_r($object);
您可以在此处找到更多信息:https://github.com/tpunt/PHP7-Reference#uniform-variable-syntax