2010-10-11 9 views
6

Ich habe einen Parser für PHP geschrieben und während ich mit Code von Drittanbietern herumalbere, stoße ich auf einen seltsamen Fall bezüglich des Operators [].Was bedeutet [] beim Lesen aus einem PHP-Array?

Normalerweise wird ohne einen Schlüssel auf der linken Seite einer Zuweisung verwendet, was "als letztes Element hinzufügen" bedeutet.

$a = array(); 
$a[] = 1; 

fügt 1 am Ende des Arrays $ a hinzu. obwohl

In dem oben genannten Code, sah ich eine Zeile wie diese:

$r =& $a[]; 

Wenn ich die & zu entfernen versuchte, bekam ich einen ziemlich fatalen Fehler zu erwarten:

Fatal error: Cannot use [] for reading

Mit dem & Allerdings beschwert sich PHP überhaupt nicht. Was bedeutet der Ausdruck

& $a[]; 

?

Antwort

12

Die Syntax bedeutet "verwende einen Verweis auf $ a []" oder einen Verweis auf das zuletzt erstellte Array-Element.

<?php 
$a=array(); 
$a[] = "a"; 
$a[] = "b"; 

print_r($a); 

$r =& $a[]; 

print_r($a); 

$r = "c"; 

print_r($a); 

produziert:

Array 
(
    [0] => a 
    [1] => b 
) 
Array 
(
    [0] => a 
    [1] => b 
    [2] => 
) 
Array 
(
    [0] => a 
    [1] => b 
    [2] => c 
) 
+19

Nun, da wir wissen, was es bedeutet, lasst uns alle versprechen, es nie zu benutzen. – webbiedave

+0

Wir müssen in der Tat. :-) – Yiannis

1

Meine Vermutung ist, dass es ein leeres Element in das Array addiert und gibt $ eine Referenz auf dieses Array-Element r. Sind Sie sicher, dass $ a ein Array sein soll? Es könnte auch versuchen, mit der [] -Syntax auf ein Zeichen eines Strings zuzugreifen, in welchem ​​Fall ich keine Ahnung habe, wie das funktionieren würde.