2017-07-25 57 views
1

QUESTIONPHP 7.0 VS 5.6 - 陣列密鑰php5.6 VS 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運行它,阿帕奇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] => 
) 

這不會破壞我的代碼,我只是真的掛斷了爲什麼它是不同的,並沒有開始我的研究。

注意:這是我在這裏感興趣的對象,而不是通知 - 兩者都有錯誤報告。

回答

1

你不能在PHP7做到這一點:

<?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

$object->$assoc_array[$item] = ""; 正如你看到的,你得到一個通知,這個替換您的代碼