phpbar.de logo

Mailinglisten-Archive

Re: AW: [php] kaputter String ( was: Array mit String überschreiben - Bug?)

Re: AW: [php] kaputter String ( was: Array mit String überschreiben - Bug?)

Peter Bieling network at media-palette.de
Son Jun 6 15:20:52 CEST 2004


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