unbekannte Syntaxabkürzungen
LSpreee
- php
0 Der Martin
0 LSpreee
0 Texter mit x0 Beat0 dedlfix
Hi folks.
Die cracks unter Euch kennen bestimmt einige Syntaxabkürzungen von php. Ich kenne nur diese.
echo "Sie haben ".$zahl." eingegeben."; echo "Sie haben $zahl eingegeben.";
Nun ist mir anscheinend wieder eine Abkürzung aufgekommen:
$w_o = 0;
function cmp ($a, $b){
global $w_o;
if ($a[$w_o] == $b[$w_o]) return 0;
return ($a[$w_o] < $b[$w_o]) ? -1 : 1;
}
Dies ist eine Vergleichsfunktion, die für usort geschrieben wurde.
Aufgerufen mit
usort($zweidimarray,"cmp");
Die Funktion sortiert ein zweidimensionales Array. Die Funktion tut genau das, was sie soll bei mir. Allerdings verstehe ich den Algorithmus nicht.
Was tut die letzte return-Zeil (da hinten mit dem Fragezeichen und dem Doppelpunkt)?
Und wo werden zwei Parameter an die Funktion gegeben?
Das Beispiel ist übrigens direkt von php.net
Vielen Dank für Antworten.
Hallo,
Die cracks unter Euch kennen bestimmt einige Syntaxabkürzungen von php.
- statt "and" und "or" bei Vergleichsoperatoren "&&" und "||".
das sind keine Abkürzungen, sondern gleichartige Operatoren mit unterschiedlicher Priorität.
- statt
echo "Sie haben ".$zahl." eingegeben."; echo "Sie haben $zahl eingegeben.";
Das ist zwar im Ergebnis das Gleiche, aber ein kleiner Bedeutungsunterschied.
return ($a[$w_o] < $b[$w_o]) ? -1 : 1;
Und das ist der ternäre Operator, auch Fragezeichen-Operator genannt. Eine elegante Konstruktion:
(expr ? a : b)
Dieser Ausdruck gibt a zurück, wenn expr im boolschen Sinn wahr ist, sonst b.
usort($zweidimarray,"cmp");
Und wo werden zwei Parameter an die Funktion gegeben?
Das macht usort() selbständig, wenn es die Funktion cmp aufruft.
Ciao,
Martin
Vielen Dank, Martin, für diese ausführliche Erklärung.
Was tut die letzte return-Zeil (da hinten mit dem Fragezeichen und dem Doppelpunkt)?
Bedingung wahr ? dann das : sonst das
Und wo werden zwei Parameter an die Funktion gegeben?
Hoffentlich da wo sie aufgerufen wird?!
Hi folks.
Die cracks unter Euch kennen bestimmt einige Syntaxabkürzungen von php. Ich kenne nur diese.
- statt "and" und "or" bei Vergleichsoperatoren "&&" und "||".
In Perl haben die eine sehr verschiedene Rangstufe.
- statt
echo "Sie haben ".$zahl." eingegeben."; echo "Sie haben $zahl eingegeben.";
Wobei du schlecht gegen schlechter vertauscht.
echo "i ", $am, "allready ", a_list( "function" );
Wie auch in perl
return ($a[$w_o] < $b[$w_o]) ? -1 : 1;
das ist eine eine if/else Schreibweise
Die kann auch verschachtelt werden im Sinne von if/else(if/else))
$a = (
$b < 1
? 1
: ( $b < 5
? 2
: ( $b < 19
? 3
: 42
)
)
);
Die Schreibweise sollte nur für triviale Vergleiche verwendet werden.
mfg Beat
Hi!
return ($a[$w_o] < $b[$w_o]) ? -1 : 1;
das ist eine eine if/else Schreibweise
Wenn du den kompletten Ausdruck betrachtest, magst du Recht haben.
if ($a[$w_o] < $b[$w_o])
return -1
else
return 1;
oder auch
if ($a[$w_o] < $b[$w_o])
return -1
return 1;
sind vom Resultat her Alternativen obigen Konstrukts. Betrachtet man jedoch ?: und if/else separat, so ist das eine ein Operator, der ein Ergebnis liefert, und das andere eine Kontrollstruktur, die den Programmablauf beeinflusst.
Man kann zwar zu jedem ?:-Gebilde eine alternatives if/else schreiben, aber nicht umgekehrt (jedenfalls nicht ohne Zuhilfenahme weiterer Syntaxelemente).
Lo!