Liebe Self Gemeinde,
bei stöbern im Netz bin ich auf ein paar PHP Übungen und Fragen gestossen. (teilweise Zend)
Manches ist mir nicht so klar, daher mal meine Bitte ob jemand mal meine Erklärungsversuche durchsieht oder genaue Infos dazu gibt. Hier die Fragen:
Beispiel1:
$x = "08";
$y = 08;
$z = "47";
$x += 15;
$y += "15";
$z += 11;
echo $x $y $z;
Liefert als Ergebnis:
231558
Ist das so weil:
Der Wert 23 bei $x weil PHP den String "08" automatisch als Zahl 8 erkennt und 8 + 15 = 23 ist?
Der Wert 15 bei $y weil PHP die Zahl 08 als 0 interpretiert und daher Gesamt = 15 ergibt?
Der wert 58 bei $z weil PHP den String "47" als Zahl 47 interpretiert und + 11 dann 58 ergibt?
Beispiel 2
Warum bringt dieser Code Syntax Error?
define ('CONSTANT', 1);
define ('_CONSTANT', 0);
define ('EMPTY', '');
if (!empty(EMPTY)) { //hier erster Syntax Error
if (!(boolean) _CONSTANT)) { // wirft auch einen Fehler
print "One";
}
} else if (constant('CONSTANT') == 1) {
print "Two";
}
Kommt der erste Fehler weil empty() nur bei Variablen geht? Wenn man dann aber den Code ändert nach if (EMPTY == "")) { ..passt es trotzdem nicht? Weil EMPTY ein geschützter Begriff ist? Mit _EMPTY geht es.
Was passt PHP an dieser Zeile nicht? if (!(boolean) _CONSTANT)) {
Beispiel 3
$x = (bool) " " * (int) (string) 12E-1; echo $x;
Ergibt 1 aber warum?
Was macht denn überhaupt (string) 12E-1 und wofür steht 12E-1 ? Wenn man nur echo (string) 12E-1 eingibt kommt 1,2 zu Stande
Beispiel 4
$p = "PHP";
$P = "php";
echo ($p < $P) + 2 * ($p > $P) + 3 * ($p == $P);
Das ergibt 1.
echo ($p < $P) ; ergibt 1 aber warum? wäre doch wie PHP ist kleiner php. Wird hier nach Groß Kleinschreibung verglichen? echo ($p > $P) ergibt "Leer" aber warum? und ($p == $P); ist vermutlich false
Wie muss man dann obiges Konstrukt lesen? Etwa so?
3 * false ist 0 plus 2 + Leer ist 0 plus 1 von ($p < $P) ist dann als Ergebnis 1 ?
Beispiel 5
$str = 'abcdef';
if (strpos($str, 'a')) {
echo "Zeichen 'a' gefunden";
} else {
echo "Buchstabe 'a' wurde nicht gefunden";
}
Warum wird hier immer in den Else Zweig gesprungen? Weil das Zeichen a am Anfang vom String steht und daher 0 liefert ?
Danke Gruss