Bin ich ein Array?

Post von realloc | Einsortiert in Code am 18. September 2007 | 4 Kommentare

Der Titel des Posts wirkt sicher seltsam. Aber genauso seltsam sind auch Zeichenketten (Strings) in PHP, oder zumindest waren sie es bisher. In sofern passen Titel und Thema hervorragend zusammen. Strings verhalten sich in PHP nämlich einerseits wie Arrays, andererseits auch wieder nicht. Das führt bestenfalls zu Konfusion oder eben im schlimmsten Fall zu logischen Fehlern in Programmen, die sich naturgemäß schwer finden lassen. Auf das erste Zeichen (Char) in einem String $str kann man mittels $str[0] zugreifen. Ist der String leer, führt dies lediglich zu einer Warnung. Die Länge eines Strings wird mit strlen($str) festgestellt. count($str) liefert bei einem String immer 1.

Vermutlich um dieses Durcheinander zu beseitigen, wurde die Schreibweise $str[0] als obsolet erklärt und stattdessen $str{0} eingeführt. Das sieht vielleicht nicht unbedingt ästhetischer aus, zeigt aber mehr Verwandtschaft mit dynamischen Variablen, was irgendwie auch zutreffend ist. Um noch ein Beispiel zu geben, das diese Thematik noch einmal veranschaulicht, habe ich ein paar PHP-Zeilen geschrieben, die einen String umgekehrt ausgeben:

[code lang="php"]
$str = "Ich bin ein String";
for ($i = strlen ($str) - 1; $i >= 0; $i--) {
echo $str{$i};
}
[/code]

Have fun!

Möglicherweise interessiert Dich auch...



4 Antworten auf “Bin ich ein Array?”

  1. Schmiddy sagt:

    Hallo,

    da hast du wohl die deutsche Dokumentation gelesen, und die ist nicht ganz auf dem neuesten Stand. ;-)
    $var[0] und $var{0} sind syntaktisch vollkommen identisch, für Strings und für Arrays; nur wird die {}-Schreibweise ab PHP 6 missbilligt (E_STRICT vorraussichtlich).

  2. realloc sagt:

    Das war nicht unbedingt das, was ich sagen wollte. Wenn Strings referenziert werden können, wie Arrays und umgekehrt, liegt der Schluss nahe, dass es sich hier um Altlasten aus der Naehe zu C handelt. Klar ist auf jeden Fall, dass Strings demnach als $var{0} und Arrays als $var[0] angesprochen werden sollten, um schon jetzt zukunftssicher zu schreiben.

  3. Jens sagt:

    Hallo, ich bin durch s-t-x.com auf diesen Artikel gestoßen und ich muss sagen, dass ich die [] absolut logisch finde, schließlich ist, egal in welcher Sprache, ein String immer ein char Array (okay, bei Java kommt der meist aus dem Stringpool, aber das ist ein anderer Punkt). Ich denke die eckigen Klammern sind vollkommen ok und sollten auch verwendet werden

  4. realloc sagt:

    @Jens Der Artikel ist zwar schon etwas älter, aber das Thema ist ja letztlich immer noch relativ aktuell.

    Wenn Strings sich tatsächlich wie Arrays verhalten würden, sollten auch die entsprechenden Funktionen sinnvolle Ergebnisse liefern … count($str) bsp.

    Das funktioniert aber nicht, sodass man sich am besten von dem Gedanken verabschiedet und Strings als dynamische Variablen ansieht.

Einen Kommentar schreiben