"&" für z.B. OOP in PHP

Flyde

Cadet 4th Year
Registriert
Jan. 2007
Beiträge
114
Hi, schon laaaaange lange interessiert mich, was dieses "&" in z.b. $xyz = new &class(); ist
Ich weiß auch nicht wirklich unter was ich das suchen soll.. es ist einfach ein kaufmannsund und in einem Tutorial hatte ich es auch noch nicht wirklich gesehen

Ich glaube bevor ich das weitere Jahre vor mir herumschlepp und ich 0 Ahnung habe, was es bedeutet, frag ich mal lieber nach.. sonst wirds irgendwann peinlich *g*
 
Joa... kann ich mir nun viel drunter vorstellen ^^
Muss ja kein roman sein, nur die reine funktion und wieso man es benutzt .. oder auch nicht
 
Ähm... wo hast du das denn her?
Ich habe bereits zwei umfangreiche Bücher zum Thema OOP & Design Patterns in PHP durch und soetwas ist mir noch absolut nie begegnet...
Vielleicht war's ja ein Fehler, da wo du es gesehen hast.
Ich würde es einfach weglassen. Es kann nicht wichtig sein - zumindest würde es mich wundern, weil ja nirgends etwas davon steht.
Offizielles PHP Manual bereits durchforstet?
 
Diese Zuweisung (Edit: Diese hier meine ich: "$xyz = new &class();") macht doch irgendwie auch keinen Sinn oder?
Ich dachte dass man damit so ne Art Referenz machen kann...
also z.B.
PHP:
function ChangeSomething($a, $b)
{
  $temp = $a;
  $a = $b;
  $b = $temp;
}

$x = 1;
$y = 2;
ChangeSomething($x, $y);
echo "$x $y"; // sollte eigentlich "1 2" ausgeben
ChangeSomething(&$x, &$y);
echo "$x $y"; // sollte nun "2 1" ausgeben

Kann natürlich sein, dass selbst der erste Befehl die Parameter tauscht, aber "&" wird wie gesagt nach meinem Kenntnisstand für direkte Referenzen verwendet, wenn keine Kopie eines Objekts oder so erstellt werden soll... leider hab ich das Gefühl dass PHP in der Hinsicht eh etwas unsauber implementiert ist und das Verhalten von PHP4 und 5 hier auch grundverschieden ist ...
(kann natürlich auch sein dass ich etwas viel Unsinn rede, bis morgen wird das eh bestimmt widerlegt ... is ja schon spät ^^)


Edit:
Wichtig ist das ganze halt in der OOP, wenn sichergegangen werden muss, dass an verschiedenen Stellen auf die selbe Instanz einer Klasse zugegriffen wird... Also als Beispiel...
Es gibt eine Datenbank-Klasse und verschiedene andere Klassen nutzen die selbe Instanz des Objekts.
Damit nun alle wirklich das selbe Objekt nehmen und keine Kopie des Objekts erstellt wird beim Aufruf des Constructors
PHP:
$forum = new Forum(&$datenbank); // hier könnte $datenbank kopiert werden (PHP4), deshalb zur Sicherheit den Paramater via Referenz erzwingen
// bei PHP5 wird das Objekt $datenbank automatisch als Referenz übergeben

Googlen vielleicht mal nach "Parameter als referenz übergeben PHP"

Treffer z.B: http://www.usegroup.de/software/phptutorial/referenzen.html
also so falsch lag ich gar net mal...

Edit2: Tatsächlich werden bei PHP4 grausamerweise Objekte gerne als Kopie an Funktionen übergeben und nicht als Referenz... grausam, Gott sei Dank wurde das geändert...
 
Zuletzt bearbeitet:
hm gut, erstmal vielen dank für diese ausführlichen beschreibungen

trozdem hätte ich nochmal eine abschließende frage:
PHP:
$forum = new Forum(&$datenbank); // hier könnte $datenbank kopiert werden (PHP4), deshalb zur Sicherheit den Paramater via Referenz erzwingen
// bei PHP5 wird das Objekt $datenbank automatisch als Referenz übergeben

$datenbank könnte kopiert werden ohne &.. kopiert heißt in dem fall
PHP:
$irgendwas = $datenbank;
Ist das damit gemeint?
 
Ja genau das passiert auch wenn du eine Funktion aufrufst und Parameter übergibts.
Nur in diesem Fall des Objekts "Datenbank" ist es schlecht wenn eine kopie erstellt wird. Deswegen wird, wenn das & verwendet wird, mit dem original Objekt gearbeitet.

Aber ob das wie in deiner Frage $xyz = new &class(); so ist weiss ich nicht. Habs auch noch nei gesehen und Google brachte auch keine anständiegen ergebnisse.

Grüße

tewes
 
der operator & erzwingt call-by-reference

der code-schnippsel

$xyz = new &class()

ist überigens totaler bullsh*t, aber was solls...

genutzt wird & zB bei funktionen, um sicherzustellen, dass eine referenz zurückgegeben wird und keine kopie einer variable...

$x = array('a', 'b');

$y = foo($x);

function &foo($arr)
{
// do sth stupid
}
 
nja ich habs jetzt schon n paar mal gesehen in manchen scripts von anderen, but whatever
Danke, ich denke nun weiss ich, wie ich es zu verwenden habe :)
 
Kopiert bedeutet, dass eine weitere Variable mit den identischen Daten erstellt wird... aber sie sind nur bis zum Zeitpunkt des Kopierens identisch, danach können sie getrennte Wege gehen und unterschiedliche Werte (bzw Werte für Eigenschaften) annehmen...
in Zusammenhang mit der Datenbank bedeutet das folgendes...
Zum Zeitpunkt des Aufrufs
$forum = new Forum($datenbank);
ist die Datenbank ja geöffnet... nun nehmen wir mal an dass irgendwo anders die Datenbank geschlossen wird, also nicht im Forum...

Wurde das Datenbank-Objekt kopiert, so weiß $forum nicht, dass die Datenbank eigentlich schon geschlossen ist und jede weitere Abfrage eh zwangsläufig zu einem Fehler führt usw...
Deshalb ist es bei solchen Dingen besser, eine Referenz auf ein Objekt zu übergeben (wie gesagt, in PHP5 standard, bei PHP4 leider nicht), so dass überall, wo das Objekt verwendet wird, auch der gleiche "Stand" herrscht...
 
Zurück
Oben