Mailinglisten-Archive |
Hallo Johannes,
Johannes Schlueter wrote:
> Eigentlich dachte ich PHP5 würde eine E_STRICT werfen, wenn man $string[0]
> verwendet - tut es aber nicht. (eigentlich dachte ich das schon PHP4 eine
> E_NOTICE werfen würde, erst dann hatte ich auf E_STRICT getestet...)
> Jedenfalls ist die korrekte Syntax um auf die einzelnen Zeichen eines Stirngs
> zuzugreifen mit geschweiften Klammern:
> <?php
> $string = 'foobar';
> echo $string{0}, $string{5};
> ?>
> Vergleiche Manual:
> http://www.php.net/manual/language.types.string.php
Da steht aber auch:
<zitat>
Anmerkung: Für Abwärtskompatibilität können Sie für den selben Zweck
immer noch die Array-Klammern verwenden. Diese Syntax wird jedoch seit
PHP 4 missbilligt.</zitat>
Wenn man die Kommentare im Online-Manual liest stößt man auch auf
folgendenen interssanten Versuch:
==============
03-Mar-2003 04:04
Regarding "String access by character":
Apparently if you edit a specific character in a string, causing the
string to be non-continuous, blank spaces will be added in the empty spots.
echo '<pre>';
$str = '0123';
echo "$str\n";
$str{4} = '4';
echo "$str\n";
$str{6} = '6';
echo "$str\n";
This will output:
0123
01234
01234 6
Notice the blank space where 5 should be.
(PHP 4.3.1)
=======
Wenn ich einen höheren Index wähle, wird mit Leerzeichen aufgefüllt.
Ich habe mal das Beispiel etwas abgewandelt:
<?php
echo '<pre>';
$str = '012345';
$str{3}='';
echo "$str\n";
echo "Index3: " . $str{3};
echo '</pre>';
?>
Die Testausgabe ist leer!
Hier hätte ich jetzt erwartet, dass das leere Element rausgeworfen wird.
Wird es aber nicht einmal in der Kopie:
$str2=$str;
echo "Kopierte Variable- Index3: " . $str2{3};
Der String ist hoffnungslos durchlöchert. ;-(
Auch folgendes hilft nicht, den String neu zu bewerten:
$index3 = substr($str2, 3, 1);
echo "Substring-Test: " . $index3 . "\n";
echo "Stringlänge von str2: " . strlen($str2);
> Anmerkung:
> (1) In anderen Sprachen (C sei genannt) ist ein "String" ein Array aus
> einzelnen Zeichen (char) das ist auch mir bekannt.
Ja, und dass PHP in C geschrieben ist, scheint das wohl ein Artefakt zu
sein. Denn nur so kann ich verstehen, dass es in PHP Strings geben kann,
die "in sich" Leerzeichen enthalten können.
Viele Grüße
Peter
php::bar PHP Wiki - Listenarchive