| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

18-11-2009, 10:02
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
Verständnisfrage zur Bedingungsnotation in Schleifen
Hallo liebe PHP-Gemeinde,
in letzter Zeit stoße ich häufiger auf mir bislang unverständliche Bedingungskonstrukte in Schleifen. Hierbei wird statt der mir bislang bekannten Notation z. B. if (Variable == Wert) nun so notiert: if (Wert == Variable).
Ist das Ganze eine Laune der Natur oder hat es einen tieferen Sinn, der sich mir nur nicht zu erkennen geben will?
Danke für alle Antworten im Voraus!
|

18-11-2009, 10:07
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Damit vermeidet man einen klassischen Fehler. Ein
PHP-Code:
if ($bla = 'blubb')
funktioniert einwandfrei, ist aber falsch, da nur auf eine Zuweisung geprüft wird. Dagegen wirft ein
PHP-Code:
if ('blubb' = $bla)
einen Fehler aus und macht uns darauf aufmerksam, dass wir wieder mal ein Gleichheitszeichen vergessen haben.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-11-2009, 10:11
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
Ahh okay.....aber Readability geht schon ein bisschen krachen oder ist es nur eine Frage der Gewöhnung?
|

18-11-2009, 10:15
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Zitat:
Zitat von KillUrMind
Ahh okay.....aber Readability geht schon ein bisschen krachen oder ist es nur eine Frage der Gewöhnung?
|
Ist reine Gewöhnung. Ich schreib das nur noch so.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-11-2009, 10:21
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Ich schreibs nicht so, aber solche Vergleiche habe ich auch schon seit Jahren nicht mehr gemacht.
Beispiele:
PHP-Code:
if($this->getFoo() == $this->getRequest()->getParam('foo')) {} // kann gar nicht zuweisen
if(self::TOKEN == $this->getRequest()->getParam('provided')) {} // kann gar nicht zuweisen
if($this->hallaballuza()) {} // und hier eh nicht
Geändert von unset (18-11-2009 um 10:25 Uhr)
|

18-11-2009, 10:26
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
Alles klar. Ansich gar nicht mal so dumm....mal schauen ob ich mich daran gewöhnen kann^^
@unset: Was meinst du mit "solchen" Vergleichen? Generell (wie denn sonst?) oder nur die "neuere" Form?
@Kropff: Schreibst du dann jetzt sämtliche Vergleiche so oder nur die Gleichheits-Vergleiche?
Geändert von unset (18-11-2009 um 10:35 Uhr)
Grund: Doppelpost
|

18-11-2009, 10:35
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Schau dir halt die Beispiele an … es kann gar nicht zu einer Zuweisung kommen …
|

18-11-2009, 10:35
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
Zitat:
Zitat von unset
[...]
PHP-Code:
if($this->getFoo() == $this->getRequest()->getParam('foo')) {} // kann gar nicht zuweisen
if(self::TOKEN == $this->getRequest()->getParam('provided')) {} // kann gar nicht zuweisen
if($this->hallaballuza()) {} // und hier eh nicht
|
Du meinst hier, dass die Reihenfolge egal ist oder? Sonst kann ich das "zuweisen" nicht deuten.
Wenn ja, dann klar, aber bei konstruierenden Methoden-Calls und deren Resultatüberprüfung möchte ich das Ganze bei "okay" ja nicht nochmal callen müssen, sondern den Wert aus der zwischengespeicherten und zum Vergleich herangezogenen Variable nutzen.
|

18-11-2009, 10:39
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Zitat:
Zitat von KillUrMind
Wenn ja, dann klar, aber bei konstruierenden Methoden-Calls und deren Resultatüberprüfung möchte ich das Ganze bei "okay" ja nicht nochmal callen müssen, sondern den Wert aus der zwischengespeicherten und zum Vergleich herangezogenen Variable nutzen.
|
Verstehe ich nicht. Was meinst du genau mit konstruiert? Zusammengeschraubte Methodennamen, die du dynamisch aufrufst? Und selbst wenn: Warum solltest du die nicht noch einmal aufrufen? Und bitte nicht mit der Performance-Keule kommen
|

18-11-2009, 10:48
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Zitat:
Zitat von KillUrMind
@Kropff: Schreibst du dann jetzt sämtliche Vergleiche so oder nur die Gleichheits-Vergleiche?
|
Ich mache das auch nur dann, wenn obiger Fehler auftauchen könnte. Ich habe allerdings im Gegensatz zu unset noch mit einem nicht unerheblichen Teil prozeduraler Programmierung zu tun (Altlasten, xtCommerce, etc.). Bei konsequenter OOP fällt mir auf die Schnelle nur die Prüfung auf boolsche Werte ein.
PHP-Code:
if (true === $this->getSomething())
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-11-2009, 11:10
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
Zitat:
Zitat von unset
Verstehe ich nicht. Was meinst du genau mit konstruiert? Zusammengeschraubte Methodennamen, die du dynamisch aufrufst? Und selbst wenn: Warum solltest du die nicht noch einmal aufrufen? Und bitte nicht mit der Performance-Keule kommen 
|
Ich meine Funktionen die mir einen Wert zurückliefern mit dem ich dann weiterarbeiten möchte.
|

18-11-2009, 11:26
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Meinst du sowas?:
PHP-Code:
while ($row = mysql_fetch_object($resultHandle)) {
// ...
}
Das ist wieder was anderes, weil es kein Vergleich ist.
Für Vergleiche gilt: wenn du Konstanten, Literale oder Getter-Aufrufe links notierst, kannst du nicht aus versehen = statt == verwenden, ohne dass der Parser meckert.
Gruß,
Amica
|

18-11-2009, 13:11
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
nein, was ich meinte ist sowas:
PHP-Code:
function foo($x = null) { return (isset($x) && is_int($x)) ? $x+=1 : $x; }
// "schlecht"; @unset: klar keine zuweiseung if (2 == foo(1)) { echo foo(foo(1)); }
// "besser" $tmp = foo(1); if (2 == $tmp) { echo foo($tmp); }
Geändert von KillUrMind (18-11-2009 um 13:27 Uhr)
|

18-11-2009, 13:15
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Wie ich schon sagte, solche Vergleiche sind mir schon lange nicht mehr untergekommen. Irgendwo wird die 2 herkommen …*und wenn es hardcoded ist, dann stimmt generell schon was nicht … und warum man den anderen Vergleichswert erstmal in einer Variable packen will, erschließt sich mir nicht.
|

18-11-2009, 13:24
|
|
KillUrMind
Registrierter Benutzer
|
|
Registriert seit: Jan 2008
Ort: Berlin
Beiträge: 111
|
|
Warum? Ich meine, wenn ich z. B. für eine Aktion privilege states einer Gruppe abfrage fällt mir nicht ein, wie man es sonst machen sollte. Außer sie sind eben selbst wieder dynamisch angelegt okay.
Zum Zwischenspeichern: Im Bsp. mag es ja noch gehen, aber wenn es umfangreichere Methoden sind und sich diese in einer Applikation häufen, bzw. in einer Schleife called werden, dann ist es ein umgänglicher Performance-Verlust, sofern sie länger als eine Zuweisung brauchen. Oder liege ich da falsch?
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|