Mailinglisten-Archive |
Hallo Andreas, Andreas Müller wrote: > ich hab die Diskussion etwas verfolgt und mich köstlich amüsiert. Freut mich. ;-) > In jeder Programmiersprache kann man Unfug anstellen wenn man etwas in einer > Art verwendet wie es nicht vorgesehen ist. Und darüber ewig zu debattieren > macht absolut keinen Sinn. Och, ich denke, man kann eine Menge über die Sprache lernen. > [...] Und da der String eben alle Zeichen > aufnehmen kann hat nunmal auch ein Zeichen chr(0) die länge von 1. Ist ja > auch genau ein Zeichen nämlich genau das Zeichen mit den Ordinalwert 0. [...] Ja, das wird über die Kommandozeile auch als Leerzeichen angezeigt, wie ich jetzt bei weiteren Tests gesehen habe. chr(0) != ''. Daraus folgerst Du ja auch richtig: > $string{1}='' - sollte Prinzipiell einen Fehler liefern. Ein Character (und > das ist $var{1} nunmal) > kann nicht gleich einem Leerstring sein. > > $string{1}='ab' - sollte prinzipiell einen Fehler liefern. Ein Character > kann nur maximal einen anderen > Character aufnehmen und nicht mehere. > > $string[index] - sollte prinzipiell einen Fehler liefern. Ein String ist > nunmal kein Array wenn in der > Programmiersprache ein anderer Syntax (nämlich mit {}) für > den Einzelzeichenzugriff > vorgesehen ist (Array expected). Oder man müsste sämmliche > nicht numerischen Indices als > Fehler behandeln (invalid array index). Für alles weitere > gilt wie oben: Ein Character ist > ein Character. Ja, vollkommen einverstanden. Offenbar ist {} und [] in PHP austauschbar, wie ich vorhin festgestellt habe. <?php $zeichen = array('A', 'B', 'C'); echo $zeichen{2}; //Gibt C aus ?> Ist das irgendwo dokumentiert? Das ergibt nämlich wieder witzige Effekte: Ganzes Beispiel für Browseranzeige: <?php $wort = ''; echo gettype($wort) . '<br>'; $wort{0} = 'A'; echo gettype($wort) . '<br>'; print $wort . ': Lenght: ' . strlen($wort) . '<br>'; //Produziert Notice //<b>Notice</b>: Array to string conversion [...] //Array: Lenght: 5 [Warum 5 ??? ] echo "<pre>"; print_r($wort); echo "</pre>"; print count($wort); //Hier nur 1 Element ?> Wenn man statt dessen mit $wort='A' beginnt, bleibt es ein String. $wort{10} = 'B' füllt dann die fehlenden Stellen mit Leerzeichen auf, was ja bereits bekannt ist. Das Verhalten ist also wieder vollkommen inkonsequent. > [...] Ganz klar ist aber das eine > Programmiersprache (und hier eben PHP) doch etwas strenger sein könnte und > Blödsinn gleich im Keim ersticken sollte. Das ist gerade deswegen notwenig > weil es in PHP keine explizite Typ-Deklaration gibt und somit Probleme > vorprogrammiert sind die entstehen können wenn unterwegs eine Variable mal > ihren Datentyp ändert. Da gebe ich Dir vollkommen recht. Und daher finde ich diese Diskussion auch nicht fruchtlos. Es lesen ja auch einige Leute mit Einfluss mit. ;-) Viele Grüße Peter
php::bar PHP Wiki - Listenarchive