AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fehler bei php.net melden?

Ein Thema von himitsu · begonnen am 8. Aug 2010 · letzter Beitrag vom 20. Aug 2010
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

AW: Fehler bei php.net melden?

  Alt 11. Aug 2010, 20:01
Lesen und fuer immer merken:
Zitat:
[12:09]<anonym>: Don't use references and be happy.
Nach der Schleife ist $str ein Pointer auf $array[4]. Das wird auch immer als Referenz verwendet werden.
Wenn du sowas machst:
PHP-Quellcode:
$i = &$blah;
for ($array as $i => $str) doSomething();
Dann darfst du nicht erwarten, dass $i nicht als Referenz benutzt wird.

Das Reference-Konzept von PHP ist bisserl eigenartig, umso wichtiger ist es dass man es versteht bevor man es verwendet. Ich kann dir wirklich nur den Satz von oben erwaehntem Entwickler ans Herz legen. Der Herr arbeitet seit 10 Jahren mit PHP und ist im Core-Team - wenn der sowas sagt dann ist da was dran.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

AW: Fehler bei php.net melden?

  Alt 20. Aug 2010, 14:23
Glueckwunsch - dein Code hats auf den Blog von besagtem Entwickler geschafft, da auch mit einer sehr ausfuehrlichen Erklaerung: http://schlueters.de/blog/archives/1...d-foreach.html

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.401 Beiträge
 
Delphi 12 Athens
 
#3

AW: Fehler bei php.net melden?

  Alt 20. Aug 2010, 14:34
Würde PHP aber am Ende der Schleife die Referenz wieder auflösen/entfernen, dann gäbe es dieses "Problemchen" doch aber garnicht?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Fehler bei php.net melden?

  Alt 20. Aug 2010, 14:57
Ich sehe das genau so. Da hat jemand einen Fehler gebaut und schiebt die Schuld auf irgendwelche Umstände anstelle das der Fehler am Ursprung entfernt wird.

Zumindest ich kenne spontan keinen Fall bei dem man das aktuelle Verhalten haben will.
Hingegen kenne ich nur Fälle in dem man genau das Gegenteil will.
Es macht aus meiner Sicht keinen Sinn das man etwas hinschreiben muss ohne das es gar nicht geht. Für mich ist es so als ob man bei Delphi hinter jede Anweisung noch "do" schreiben müsste (und wenn man es nicht macht passiert irgend etwas ganz anderes als die Anweisung mit "do" bewirkt).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

AW: Fehler bei php.net melden?

  Alt 20. Aug 2010, 16:11
Wenn du das Konstrukt auseinanderdroeselst, dann weisst du nicht mehr dass du in einer Schleife die Zuweisung hattest. Der einzige Fehler den ich da sehe ist die Moeglichkeit, in der Schleife die "Laufvariable" als Referenz zu verwenden. Der Rest macht absolut Sinn. Es waere mindestens genauso falsch, die Referenz nach der Schleife zu killen, v.a. da das sonst nirgends in PHP moeglich ist. Verwende ich in einer Funktion eine Variable dann kann ich die von da an immer benutzen. Eine Variable nur im Schleifenkontext zu erstellen ist in PHP nicht moeglich.
Noch ein Beispiel:
PHP-Quellcode:
foreach ($foo as $bar => &$baz) {
    if (someCondition()) {
        break;
    }
}
$baz->doSomething();
Wenn mir PHP nun die Referenz unterm Arsch wegziehen wuerde, waere das ein sehr ungewohntes Verhalten. Ich gehe davon aus, dass ich in $baz die Referenz zum zuletzt bearbeiteten Array-Element habe, genauso wie ich nach dieser Schleife einen bestimmten Wert fuer $i erwarte:
for ($i = 0; $i < $someCount; $i++) Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.401 Beiträge
 
Delphi 12 Athens
 
#6

AW: Fehler bei php.net melden?

  Alt 20. Aug 2010, 17:17
Man kann da notfalls auch einfach den Wert kopieren und damit die Referenz ersetzen.
Aber wer nutzt schon eine Schleifenvariable außerhalb der Schleife? (ein Delphianer lernt/macht sowas jedenfalls nicht )
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz