2 Stimmen

Symbol in PHP, das ich noch nie gesehen habe

Wahrscheinlich hätte ich das tun sollen, aber ich habe das noch nie gesehen. Ich bin darauf gestoßen, als ich mir die Dokumentation eines Smarty-Plugins angesehen habe.

$smarty =& new Smarty;

Insbesondere das Zeichen =&. Wenn Sie es in Google eingeben, wird es ignoriert, genau wie bei jeder anderen Suchmaschine. Wofür wird es verwendet?

Das Gleiche gilt für diese Funktionssignatur:

function connect(&$smarty, $reset = false)

Warum das Symbol &?

15voto

Arno Punkte 737

Eigentlich ist dieser Code so geschrieben, dass er mit PHP 4 kompatibel ist. Das kaufmännische Und ist in PHP 5 nutzlos (wie Tim sagte - seit PHP 5 werden alle Objekte per Referenz übergeben).

Mit PHP 4 wurden alle Variablen als Wert übergeben. Wenn man sie per Referenz übergeben wollte, musste man eine Referenzzuweisung deklarieren:

$ref_on_my_object =& new MyObject();

Dieser Code wird auch mit der Standardkonfiguration von PHP 5 akzeptiert, aber es ist besser, die :

$ref_on_my_object = new MyObject(); // Reference assignment is implicit

Bei Ihrem zweiten Problem ist das Problem "fast" dasselbe... Weil PHP es erlaubt, Funktionsargumente (bzw. -typen) zu deklarieren, und man das nicht für Rückgabewerte tun kann. Eine akzeptierte, aber "nicht so gute" Praxis ist es, die Deklaration von Referenzen innerhalb der Funktionsdeklaration zu vermeiden:

function foo($my_arg) {    
    // Some processing
}

und mit einer Referenz anzurufen...

$my_var;
$result = foo( &$my_var );
// $my_var may have changed because you sent the reference to the function

Die ideale Erklärung würde eher wie folgt lauten:

function foo( & $my_input_arg ) {    
    // Some processing
}

dann verliert der Aufruf das kaufmännische Und:

$my_var;
$result = foo( $my_var );
// $my_var may have changed because you sent the reference to the function

12voto

Sarfraz Punkte 366217

4voto

Paul Lammertsma Punkte 36529

& übergibt ein Argument als Referenz . Auf diese Weise, connect() kann die $smarty Objekt, damit die aufrufende Funktion das geänderte Objekt abrufen kann.

Ähnlich, =& setzt eine Variable per Referenz.

3voto

Michael Anderson Punkte 65535

Wie Tim sagte, ist es ein Verweis auf eine Variable. Aber wenn Sie eine aktuelle Version von PHP verwenden, werden alle Klassenobjekte sowieso per Referenz übergeben. Sie würden dies immer noch brauchen, wenn Sie über Arrays oder andere eingebaute Typen obwohl übergeben wurden.

2voto

Peter Lindqvist Punkte 9942

Im ersten Beispiel wird ein Verweis zurückgegeben, im zweiten wird ein Verweis übergeben.

Sie können alles darüber in der PHP Handbuch

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X