Skip to content

Interessantes Verhalten von PHP bzgl. Arrays, Referenzen und Rückgabewerten

Sehr interessant, wie unterschiedlich PHP in den verschiedenen Versionen (4, 5.1, 5.2 und 5.3) dieses kleine Schnipsel handeln:
function f(&$obst) {
 $obst['birne'] = 'gelb';
 return $obst;
}

$obst['apfel'] = 'gruen';
$obst = f($obst);
Ihr dürft gerne raten, was in $obst steht ;-)

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Fabian Schlenz

Das ist einfach: Nichts, weil du $blubb nirgends verwendest. :D

Falls du $obst meinst, wäre die intuitive Lösung natürlich {'apfel':'gruen', 'birne':'gelb'}...

Adrian

Wenn $obst gemeint war, ist das Ergebnis in nahezu allen Versionen identisch: http://3v4l.org/8DlaQ

rae

Viel "lustiger" finde ich:

array() == NULL;
"" == NULL;
array() != "";

Mal abgesehen von dem Rätselraten, wie empty() auf verschiedene NULL-Werte reagiert... Mit Logik hat das jedenfalls nur noch wenig zu tun.

Jan

Zu den NULL-Vergleichen: Nachdem du typen-unsicher vergleichst konvertiert PHP alles in den selben Typ, und da sind leere Werte (egal ob Integer, Strings oder eben NULL) halt alle leer, also das selbe. Mit einem Typesafe-Vergleich (===) wäre das nicht passiert...

Was empty() angeht stimme ich dir allerdings vollkommen zu, allerdings gibt es da in der Doku ja eine Liste mit den Dingen, die empty() sind :)

Xykr

Interessante Lektüre zu dem Thema:

http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

onli

Unterschiede in den Versionen gibt es ja bei den Referenzen. Hier returnst du $obst aber sowieso wieder, und deklarierst die Referenz in der Funktionsbeschreibung, wie es sein soll. PHP sollte da in den unterschiedlichen Versionen überhaupt nichts anders machen, ich seh bei deinem Link auch überhaupt keine unterschiedlichen Ergebnisse.

Manuel, was meintest du denn?

Andreas

gähn

Woo

ja, fuer den Erfinder von PHP ist sicher ein ganz eigener Kreis in der Hoelle reserviert...

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

BBCode-Formatierung erlaubt
Formular-Optionen