Frage

Mit PHP5 verwendete "Kopie auf Schreiben" und die Übergabe von Referenzen, die mehr Leistungsstrafe als einen Gewinn verursachen, warum sollte ich pass-by-Reference verwenden? Wenn Sie nicht mehr als einen Wert oder einen Klassen zurückgeben würden, möchten Sie nicht mehr als einen Wert oder einen Klassen zurückgeben, ohne später eine festgelegte Funktion aufzurufen (ich weiß, ich weiß), gibt es eine Verwendung dafür, die ich fehlt?

War es hilfreich?

Lösung

Sie verwenden Pass-by-Referenz, wenn Sie das Ergebnis ändern möchten, und das ist alles, was es gibt.

Denken Sie auch daran, dass es in PHP -Objekten sind stets Pass-by-Reference.

Persönlich finde ich das PHP -System des Kopierens von Werten implizit (ich denke, ich würde mich gegen zufällige Änderungen verteidigen) mühsam und unintuitiv, aber ich habe wieder in stark typisierten Sprachen angefangen, was das wahrscheinlich erklärt. Aber ich finde es interessant, dass sich Objekte von der normalen Operation von PHP unterscheiden, und ich halte es als Beweis dafür, dass der implizite Kopiermechanismus von PHP wirklich kein gutes System ist.

Andere Tipps

Eine rekursive Funktion, die ein Array füllt? Denken Sie daran, so etwas einmal zu schreiben.

Es macht keinen Sinn, Hunderte von Kopien eines teilweise gefüllten Arrays und Kopieren, Spleißen und Verbinden von Teilen auf Schritt und Tritt zu haben.

Auch wenn Objekte übergeben, gibt es einen Unterschied.

Probieren Sie dieses Beispiel aus:

class Penguin { }

$a = new Penguin();

function one($a)
{
  $a = null;
}

function two(&$a)
{
  $a = null;
}

var_dump($a);
one($a);
var_dump($a);
two($a);
var_dump($a);

Das Ergebnis wird sein:

object(Penguin)#1 (0) {}
object(Penguin)#1 (0) {}
NULL

Wenn Sie eine Variable übergeben, die eine Referenz auf ein Objekt durch Bezugnahme enthält, können Sie die Referenz auf das Objekt ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top