2010-03-19 17 views
8

Bedenken Sie:Was bedeutet diese Signatur (&) in PHP?

public function & get($name, $default = null) 

Warum &?

+0

möglich Duplikat [Referenz - Was bedeutet das Symbol in PHP] (http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean -in-php) – Gordon

Antwort

10

In PHP-Syntax bedeutet dies, dass die Funktion eine Referenz anstelle eines Werts zurückgibt. Zum Beispiel:

<?php 
    $foo = 'foo'; 

    function & get_foo_ref() 
    { 
     global $foo; 
     return $foo; 
    } 

    // Get the reference to variable $foo stored into $bar 
    $bar = & get_foo_ref(); 
    $bar = 'bar'; 

    echo $foo; // Outputs 'bar', since $bar references to $foo. 
?> 

In dem obigen Beispiel die & aus der Funktionsdeklaration zu entfernen würde die $foo Variable enthalten noch ‚foo‘, da nur den Wert macht, nicht die Referenz wurde aus der Funktion zurückgegeben.

Dies wurde häufiger in PHP4 verwendet, da Objekte nicht durch ihre Referenz übergeben und stattdessen geklont wurden. Aus diesem Grund mussten Objektvariablen als Referenz übergeben werden, um unerwünschtes Klonen zu vermeiden. Dies ist in PHP5 nicht mehr der Fall und Referenzen sollten nicht für diesen Zweck verwendet werden.

Funktionen, die Referenzen zurückgeben, sind jedoch auch nicht völlig nutzlos (oder schlechte Praxis, wenn sie nicht zum Ersetzen von Objektreferenzen verwendet werden).

Zum Beispiel habe ich sie beim Erstellen eines Skripts verwendet, das einen "Pfad" an eine Funktion übergibt, die den Verweis auf die Variable in diesem Pfad zurückgibt, damit ich den Wert festlegen und den Wert lesen kann. Aufgrund der rekursiven Natur der Funktion wurde die Referenz benötigt.

von rithiur

+0

+1 für pragmatische eingehende Erklärung, die auch als Beweis dafür dient, dass SOs Rep-System nicht so fair ist –

+1

'$ bar = & get_foo_ref(); ', hier & ist nicht notwendig – user198729

+0

@Manos Dilaverakis: Ich denke, gute Sachen zu teilen wäre niemals ein Fehler. – Young

11

Es bedeutet, dass es einen Verweis auf das Ergebnis im Gegensatz zu einer Kopie davon zurückgibt.

Returning References in PHP

+0

+1 Beat mich um 40 Sekunden. –

+0

Nur eine Nebenbemerkung, das ist fast nie vorteilhaft. Objekte werden als Referenz umfahren. Das einzige, was dabei helfen kann, ist Arrays (also werden sie nicht kopiert), aber der Vorteil ist minimal, wenn überhaupt vorhanden. – ryeguy