php 7.0 vs 5.6 - 对象差异的数组键

时间:2017-07-25 17:00:55

标签: php arrays object key

问题

为什么这个代码在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。这是我在这里感兴趣的对象,而不是通知 - 两者都有错误报告。

1 个答案:

答案 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