Mailinglisten-Archive |
Hallo Johannes, danke für die ausführlichen Erläuterungen und Deine Geduld. :-) Johannes Schlueter wrote: > Durch die _Zuweisung_ von nichts ('') auf $string{1} wird da das entsprechende > Zeichen nicht gelöscht sondern durch nichts ersetzt. Nichts wird dabei durch > NULL, also das Zeichen mit Ascii-Wert 0 repräsentiert. Folgendes Beispiel gibt Dir recht: $var3="ABCDEF"; echo $var3 . "---length: " . strlen($var3) . "<br>"; //length: 6 $var3= substr_replace ($var3, chr(0), 3, 1); echo $var3 . "---length: " . strlen($var3) . "<br>"; //length: 6 während, wie ja bereits gezeigt, der Tausch eines Zeichens gegen '' mit substr_replace den String tatsächlich um eins kürzt. Hier wird also mit zweierlei Maß gemessen. Vergleiche mit C und anderen Sprachen sind natürlch interessant. Aber: C ist C und PHP ist PHP. Jede Sprache sollte sich schon selbst definieren. Wenn ich in PHP einen Datentyp String habe, muss der nicht unbedingt mit dem Strings in C vergleichbar sein, die Arrays sind. (Wurde auch schon gesagt.) PHP sollte da unbedingt seine eigene in sich logische Gesetzmäßigkeit haben. Dazu gehört natürlich auch die Frage, welche Länge '' oder chr(0) hat. Wenn chr(0) keine Länge hat, ist '' natürlich nicht mehr da, wenn es als Zeichen eingesetzt wurde. Es kann dadurch den String faktisch verkürzen, d.h. ein Zeichen ausradieren. Wenn man ein Zeichen chr(0) _mit_ Länge 1 zulässt, frage ich mich: Was will man damit? > Ergebnis: Auch bei "ordentlichen" Programmiersprachen kann man nicht einfach > ein Zeichen mit "nichts" überschreiben und somit Teile aus dem String kürzen. > Wenn ich _ein_ Zeichen bearbeite will ich, dass auch nur _ein_ Zeichen > beabeitet wird. Wenn ich "Wechselwirkungen" mit anderen Zeichen zulassen will > nutze ich substr oder ähnliches, die darauf Rücksicht nehemen. Richtig, ich kann nur empfehlen, Strings ausschließlich so zu manipulieren und nicht wie folgt: > <?php > $string = 'foo'; > $string{1} = 'bar'; > echo $string; > ?> > > Gibt ja auch "fbo" und nicht "fbar" aus. Genau! Wer solchen Code schreibt, kann eigentlich nur etwas falsch gemacht haben. Von einer hardwarenahen Sprache erwarte ich _nicht_, dass sie für mich mitdenkt. Eine Skriptsprache dagegen sollte solche Fehlerquellen einfach verhindern. Noch einmal zur Erinnerung: $kein_array=array(); //Array $kein_array['gibtsnich']='Katze'; $kein_array="Katze"; //String $kein_array['gibtsnich']='Hund'; echo $kein_array['gibtsnich']; //= H echo $kein_array; //= Hatze Also mein Vorschlag: Weg mit diesen direkten Schreibzugriffen auf einzelne Zeichen in künftigen PHP-Versionen. Das braucht kein Mensch und produziert nur Fehler. Viele Grüße Peter PS. Ich werde mir gleich mal ansehen, wie Perl das Zeichen chr(0) bewertet. Bin mal gespannt. ;-)
php::bar PHP Wiki - Listenarchive