Hi,
Das _ist_ unlogisch.
Unlogisch ist es nicht. Gewöhnungsbedürftig schon. Aber es ist trotzdem klar festgelegt: Bei der Typumwandlung in eine Integer wird jeder String (der nicht mit einer Integer beginnt) automatisch zu 0. Siehe Typentabelle.
Ein String hat zwar auch in PHP bestimmte Eigenschaften eines 'Arrays', jedoch nur im _herkömmlichen_ Sinne. Der PHP-Datentyp Array jedoch kann im Gegensatz zum String-Datentyp auch 'assoziative' (=String-) Schlüssel haben.
Daher entspricht bei $a = array('a','b','c');
der Ausdruck isset($a['dummy'])
dem Wert false
- der 'assoziative' Schlüssel 'dummy' ist nicht belegt.
Und bei $s = 'abc';
ergibt isset ($s['dummy'])
den Wert true
- in Strings gibt es keine 'assoziativen' Schlüssel, daher wird 'dummy' in eine Integer umgewandelt und entspricht in diesem Fall also 0.
Wie Manuel B. schon schrieb, gibt es hier zudem einen Error des Levels E_WARNING, da String-Indizes - zur besseren Unterscheidung - über geschweifte Klammern anzusprechen sind (Also in diesem - sinnlosen - Fall eigentlich $s{'dummy'}
.)
Man kann darüber nachdenken, ob die Ausdehnung der automatischen Typumwandlung bis hin zu String-Indexen sinnvoll ist - aber andererseits kann man genauso gut sagen: Wenn schon Typumwandlung, dann bitte überall.
Freundliche Grüße,
Sancho