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