Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datentypen

0 views
Skip to first unread message

Stefan Froehlich

unread,
Dec 9, 2009, 6:51:40 AM12/9/09
to
Gerade eben nach viel zu langer Fehlersuche entdeckt (sinngemaess, jede
Menge Vorverarbeitung weggelassen):

| $aa = array();
| foreach() {
| $something = array(...);
| $a = (string)...;
| $aa[$a] = $something;
| }

$a ist eine "Nummer" im Sinn eines Wirtschaftswissenschafters, d.h.
alphanumerisch, aber eindeutig und fuer Menschen erkennbar aufsteigend
sortiert. $something ist etwas komplexeres, das durch $a eindeutig
gekennzeichnet wird. $aa ist schliesslich eine Liste aller $something, die
verarbeitet werden sollen.

Im weiteren kam dann (auch wieder nur sinngemaess) die Verarbeitung:

| foreach ($aa as $a => $something) {
| $object = Class::findInstance($a);
| if (is_null($object)) {
| throw new Exception();
| }
|
| [...]
| }

Und - peng - ist mir das ganze um die Ohren geflogen, nur weil jemand
einmal zufaellig einen Identifier uebergeben hat, der ausschliesslich aus
Zahlen besteht. Irgendwo tief drin hinter Class::findInstance() findet sich
naemlich eine Pruefung auf is_string($a), um bei unpassenden Datentypen
(insbesondere Arrays und Objekten) den geordneten Rueckzug anzutreten. Daher
auch die Konvertierung in einen String im oberen Programmfragment. So war's
gedacht.

Wie kann das sein, dass $a bei der Zuweisung als Array-Index noch vom Typ
"String" ist, bei der Evaluierung in der foreach-Schleife dann aber
ploetzlich vollautomatisch nach "Integer" konvertiert wird? Hat sich dabei
irgendjemand etwas gedacht, und was? Und mit welchen Ueberraschungen muss
ich da womoeglich noch rechnen (fuehrende Nullen, Dezimalpunkte oder
aehnliches)?

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Das weitere Stöhnen heiterer Zwirne. Stefan!
(Sloganizer)

Ulf [Kado] Kadner

unread,
Dec 9, 2009, 8:54:19 AM12/9/09
to
Hallo Stefan Froehlich! Du schriebst:


> | $aa = array();
> | foreach() {
> | $something = array(...);
> | $a = (string)...;
> | $aa[$a] = $something;
> | }
>
> $a ist eine "Nummer" im Sinn eines Wirtschaftswissenschafters, d.h.
> alphanumerisch, aber eindeutig und fuer Menschen erkennbar aufsteigend
> sortiert.

> Und - peng - ist mir das ganze um die Ohren geflogen, nur weil jemand
> einmal zufaellig einen Identifier uebergeben hat, der ausschliesslich
> aus Zahlen besteht.
>

> Wie kann das sein, dass $a bei der Zuweisung als Array-Index noch vom
> Typ "String" ist, bei der Evaluierung in der foreach-Schleife dann aber
> ploetzlich vollautomatisch nach "Integer" konvertiert wird?

[PHP-Manual - Arrays]
<http://de2.php.net/manual/de/
language.types.array.php#language.types.array.syntax>

Das Verhalten ist dort so dokumentiert:

A key may be either an integer or a string. If a key is the
standard representation of an integer, it will be interpreted as
such (i.e. "8" will be interpreted as 8, while "08" will be
interpreted as "08")

Haut also hin :-)

> dabei irgendjemand etwas gedacht, und was? Und mit welchen
> Ueberraschungen muss ich da womoeglich noch rechnen

Überraschungen?

MfG, Ulf

--
Wie erst jetzt bekannt wird, stammen fast alle Ostereier von
unglücklichen Hasen in Legebatterien. [Loriot]

Stefan Froehlich

unread,
Dec 9, 2009, 11:53:26 AM12/9/09
to
On Wed, 09 Dec 2009 14:54:19 Ulf [Kado] Kadner wrote:
> > Wie kann das sein, dass $a bei der Zuweisung als Array-Index
> > noch vom Typ "String" ist, bei der Evaluierung in der
> > foreach-Schleife dann aber ploetzlich vollautomatisch nach
> > "Integer" konvertiert wird?

> [PHP-Manual - Arrays]
> <http://de2.php.net/manual/de/
> language.types.array.php#language.types.array.syntax>

> Das Verhalten ist dort so dokumentiert: [...]

Ok, dann kann ich mich wohl nicht beschweren. Aber intelligent finde
ich das nicht gerade - ich waere nicht einmal ansatzweise auf die
Idee gekommen, dass das jemand auch noch bewusst so dokumentiert
hat.

> > mit welchen Ueberraschungen muss ich da womoeglich noch rechnen

> Überraschungen?

Also fuer mich war das ueberraschend genug...

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Welch ein endloser Gedanke: Stefan!
(Sloganizer)

0 new messages