Das PHP-Manual lügt

Gehen wir von folgendem Codeschnippsel aus:

$a = 'a';
$a++;
echo $a;

$b = 'a';
$b = $b + 1;
echo $b;

Wer vermag ohne Ausprobieren zu sagen, welchen Wert $a und welchen Wert $b hat?
Wäre PHP eine konsistente Programmiersprache, sollten $a und $b den gleiche Wert haben. Gemäß der Logik von PHP ist jedoch a == 'b' und b == 1.
Eine Sprache, die zu solchen Überraschungen führt, wird tatsächlich als besonders einsteigerfreundlich gehandelt. Als Argument für PHP wird neben der flachen Lernkurve immer wieder auf die hervorragende Dokumentation verwiesen. Wie gut kann wohl ein Manual sein, dass zu oben genannten Phänomen folgendes verklärt?

PHP follows Perl’s convention when dealing with arithmetic operations on character variables and not C’s. For example, in Perl ‚Z’+1 turns into ‚AA‘, while in C ‚Z’+1 turns into ‚[‚ ( ord(‚Z‘) == 90, ord(‚[‚) == 91 ). Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.

Dass ‚Z’+1 ‚AA‘ ergeben soll, halte ich für eine Lüge.

5 Antworten auf „Das PHP-Manual lügt“

  1. gannz einfach: $a == ‚b‘ und $b == 1. wenn du einen string inkrementierst, wird alphabetisch inkrementiert, wenn du einen string in einer mathematischen operastion verwendest, wird er zu einem integer konvertiert und lautet im fall von „a“ eben 0.

    eine ueberraschung finde ich hier nicht.

    versuchs mal entsprechen:

    for ($i = a; $i

  2. Inwieweit ist es denn sinnvoll einen String innerhalb einer mathematischen Funktion zu verwenden? Es ist schön und gut, dass es möglich ist mit dem Increment-Operator über Stings zu iterieren, aber es entbehrt jeder Logik, dass der Increment-Operator sich anders verhält als 1.

  3. > Inwieweit ist es denn sinnvoll einen String
    > innerhalb einer mathematischen Funktion zu
    > verwenden?

    moeglichkeit und sinnhaftigkeit muessen nicht ein eins sein. ich denke, das verhalten von php, typen automatisch zu konvertieren, begruendet sich in der angenommenen dummheit der user. die phps herangehensweise ind er kovertierung von strings zu integern (alles wegmachen, was nicht int ist und wenn nichts uebrig bleibt null annehmen) ist in etwa so nachvollziehbar wie das heranziehen des ascii-wertes der einzelnen zeichen…

  4. Also entweder passen sich Operatoren dem Datentyp an (was einem sinnvollen Entwurf entspräche) oder sie lassen es und werfen einen Fehler. Aber eine unterschiedliches Verhalten auf eigentlich synonyme Ausdrücke ist Todsünde. Hätte ich derartiges im Compilerbaupraktikum verbrochen, wäre ich mit dem Wirth erschlagen worden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.