Thomas Luethi: Verständnisfrage zu Login und Sessions

Beitrag lesen

Hallo Tom,

Hier kopie von php.net:

Deine untenstehenden Beispiele haben _Variablennamen_ als Schluessel.
Was ich angemeckert hatte, waren konkrete _Strings_ als Schluessel.
Und _die_ muessen in Anfuehrungszeichen stehen, weil sie sonst
(als Fallback, schlecht, aber funktionierend) als Konstanten betrachtet werden.

Das steht alles auch auf der von Dir zitierten Seite. Bitte genau lesen!
http://www.php.net/manual/de/language.types.array.php#language.types.array.foo-bar

Vorbemerkung: Im Beispiel hat die Variable $i den Inhalt 0 oder 1, also eine Zahl.
Es koennte geradesogut ein String sein.
(PHP unterscheidet bei Schluesseln nicht zwischen Zahlen und Strings; man kann
auch bunt mischen, wenn man will. Uebersichtlich ist das aber nicht...)

Zeile1: echo "Schlecht: " . $array['$i'] . "\n";

Ja, schlecht, weil hier der _Variablenname_ in _einfachen_
Anfuehrungszeichen steht und somit nicht interpretiert wird.
Der Schluessel waere hier der String $i (Dollar, i),
und fuer diesen Schluessel enthaelt der Array keinen Inhalt,
was auch zur angegebenen Fehlermeldung fuehrt:
"Undefined index:  $i"

Zeile2: echo "Gut: " . $array[$i] . "\n";

Ja, die Anfuehrungszeichen sind nicht notwendig,
denn Du setzt den Variablennamen ein, und somit ist
der Schluessel dann den Inhalt der Variable, hier die Zahl 1.

Zeile3: echo "Schlecht: {$array['$i']}\n";

Ja, siehe oben.
Zwischen den geschweiften Klammern gilt das gleiche
wie _ausserhalb_ der doppelten Anfuehrungszeichen...

Zeile4: echo "Gut: {$array[$i]}\n";

Ja, siehe oben.

$array[$i]=time();
$array['$i']=time();

So wie ich das verstehe ist Zeile 1 schlecht, oder??

Nein, gerade nicht. Zeile 1 ist gut, Zeile 2 ist schlecht.

Zur Wiederholung und Klarstellung:

Zahl als Schluessel:
$meinarray[1] ist gut.
$meinarray['1'] ist gut.
$meinarray["1"] ist gut.

String als Schluessel:
$meinarray[bla] ist schlecht.
$meinarray['bla'] ist gut.
$meinarray["bla"] ist gut.

Variablenname als Schluessel:
Voraussetzung: Die Variable $variablenname enthaelt eine Ganzzahl (Integer) oder einen String
$meinarray[$variablenname] ist gut
$meinarray['$variablenname'] ist schlecht
   (ausser man meint den String $i als Schluessel, aber nicht zu empfehlen...)
$meinarray["$variablenname"] funktioniert und ist IMHO OK
   (weil die Variable zwischen den doppelten Anfuehrungszeichen interpretiert wird)

Siehe auch: Variablen-Analyse (parsing) in Strings:
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing

Gruesse,

Thomas

--
Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/