Mailinglisten-Archive |
Hallo Peter, ich hab die Diskussion etwas verfolgt und mich köstlich amüsiert. 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. Strings sind in PHP nunmal binary safe. Und das finde ich richtig gut so! Wer C und ähnliche Sprachen kennt die Probleme mit Null-Terminierten-Strings. Bleiben wir mal bei 8 Bit Zeichen dann kann eben ein String in PHP alle zeichen von 0-255 aufnehmen. Ein String in C nicht - was ich manchmal recht blöd finde. 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. Und das ist in jeder Programmiersprache so. Auch in C hat ein chr(0) die Länge 1 - nur "erkennt" C an diesem Zeichen das der String hier "aufhören" soll. Deswegen belegt ein String in C auch immer Länge+1 Bytes an Platz - weil das letzte Zeichen (chr(0)) ja mitgespeichert werden muss. PHP oder Pascal(z.B. Delphi) führen halt zu einem String noch eine Längenangabe mit. Somit entfällt dieses "Endezeichen". Und das hat imense Vorteile: Die Sprache weiss durch den Zugriff auf einen Speicherbereich wie lang der String ist - C muss da zählen und man kann alle Zeichen unterbringen. Hat aber auch einen Nachteil: Man brauch ein paar Byte mehr Platz pro String (z.B. 4 Byte in Delphi). Ein paar Sachen finde ich in PHP nicht konsequent genug gelöst/überwacht z.B.: $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. Wenn man einfach das beherzigt und alles als das verwendet was es ist: String als String, Array als Array und Character als Character dann hat man auch keine Probleme. Wenn man aber anfängt rumzutricksen dann braucht man sich über Seiteneffekte nicht wundern. 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. Gruß, Andreas
php::bar PHP Wiki - Listenarchive