phpbar.de logo

Mailinglisten-Archive

[php] Array mit String überschreiben - Bug?

[php] Array mit String überschreiben - Bug?

Peter Bieling network at media-palette.de
Sam Mai 22 11:17:25 CEST 2004


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