2013-02-27 8 views
6

Ich habe in meiner Reise zu creaitng und bauen einige meiner PHP-Anwendungen, die & Symbol vor vars, = und Klassennamen gesehen.PHP Referenzen: Ein Verständnis

Ich verstehe, dass dies PHP-Referenzen sind, aber die Dokumente, die ich gesehen und angeschaut habe, scheinen es nur nicht auf eine Weise zu erklären, die ich verstehe oder verwirre. Wie kannst du die folgenden Beispiele erklären, die ich gesehen habe, um sie verständlicher zu machen?

public static function &function_name(){...} 

    $varname =& functioncall(); 

    function ($var, &$var2, $var3){...} 

Viel

geschätzt
+0

Siehe http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php '= & References' Block. – Winston

Antwort

4

Angenommen, Sie haben zwei Funktionen

$a = 5; 
function withReference(&$a) { 
    $a++; 
} 
function withoutReference($a) { 
    $a++; 
} 

withoutReference($a); 
// $a is still 5, since your function had a local copy of $a 
var_dump($a); 
withReference($a); 
// $a is now 6, you changed $a outside of function scope 
var_dump($a); 

So Argument vorbei Referenzfunktion es außerhalb des Funktionsumfangs ändern können.

Jetzt zweites Beispiel.

Sie haben eine Funktion, die eine Referenzfunktionen

class References { 
    public $a = 5; 
    public function &getA() { 
     return $this->a; 
    } 
} 

$references = new References; 
// let's do regular assignment 
$a = $references->getA(); 
$a++; 
// you get 5, $a++ had no effect on $a from the class 
var_dump($references->getA()); 

// now let's do reference assignment 
$a = &$references->getA(); 
$a++; 
// $a is the same as $reference->a, so now you will get 6 
var_dump($references->getA()); 

// a little bit different 
$references->a++; 
// since $a is the same as $reference->a, you will get 7 
var_dump($a); 
+1

@ Marko D vielen Dank für das oben genannte, ich wollte so verstehen, wenn es irgendeine Verwendung für aktuelle Projekte war und wenn nicht ein Sinn für zukünftige. –

0

Referenz zurück

$name = 'alfa'; 
$address = 'street'; 
//declaring the function with the $ tells PHP that the function will 
//return the reference to the value, and not the value itself 
function &function_name($what){ 
//we need to access some previous declared variables 
GLOBAL $name,$address;//or at function declaration (use) keyword 
    if ($what == 'name') 
     return $name; 
    else 
     return $address; 
} 
//now we "link" the $search variable and the $name one with the same value 
$search =& function_name('name'); 
//we can use the result as value, not as reference too 
$other_search = function_name('name'); 
//any change on this reference will affect the "$name" too 
$search = 'new_name'; 
var_dump($search,$name,$other_search); 
//will output string 'new_name' (length=8)string 'new_name' (length=8)string 'alfa' (length=4) 

Normalerweise verwenden Sie die Methode mit Objekten, die die gleiche Schnittstelle implementiert, und Sie wollen Sie das gewünschte Objekt wählen um mit dem nächsten zu arbeiten.

Vorbei Referenz:

function ($var, &$var2, $var3){...} 

Ich bin sicher, dass Sie die Beispiele gesehen, so dass ich nur erklären, wie und wann es zu benutzen. Das grundlegende Szenario ist wann haben Sie eine große Logik, die Sie auf ein aktuelles Objekt/Daten anwenden möchten, und Sie möchten nicht mehr Kopien davon (im Speicher) machen. Hoffe, das hilft.

+0

vielen dank dafür. –