phpbar.de logo

Mailinglisten-Archive

[php] Index von Arrays führen zu <Notes>

[php] Index von Arrays führen zu <Notes>

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Sam Mar 17 11:34:20 CET 2007


Hi Sebastian,

Am Samstag, 17. März 2007 11:06 schrieb Sebastian Mendel:
> Lutz Zetzsche schrieb:
> > Die interessante Frage ist nun, warum nicht schon das bloße
> > Übergeben einer nicht existenten Variable an die Funktion isset()
> > zu einer Fehlermeldung führt.
>
> da ist schon der erste Fehler ... ;-)

stimmt... Aber Du mußt zugeben: Im Handbuch steht auch überall Funktion. 
Nur der Satz, "Anmerkung: Da dies ein Sprachkonstrukt und keine 
Funktion ist, deshalb können Sie dieses nicht mit Variablenfunktionen 
verwenden.", deutet auf ein Sprachkonstrukt hin.

Auf der anderen Seite funktioniert isset() nicht ohne Klammern, wie es 
für die Verwendung von Sprachkonstrukten empfohlen wird:

	http://www.phpbar.de/w/Sprachkonstrukt

Schon etwas durcheinander, oder? ;-) Sieht nach einem Zwitter aus. :-D

> isset() ist keine Funktion - sondern ein Sprachkonstrukt

echo ist aber auch ein Sprachkonstrukt, und wenn ich dem eine 
undefinierte Variable übergebe, gibt es den Fehler auch. Also haben 
wird das Problem damit zunächst nur von der Funktions- auf die 
Sprachkonstruktebene verschoben. :-)

> > Ich habe mal schnell folgenden Textcode programmiert:
> >
> > <?php
> >
> > function testf($param) {
> >   return '<br />#Test';
> > }
> >
> > echo '<br />#'.isset($_GET['x']);
> > echo '<hr />';
> > echo testf($_GET['x']);
> >
> > ?>
> >
> > In der Funktion testf() wird nicht auf den Parameter zugegriffen.
> > Trotzdem kommt die Warnung "Undefined Index". Bei isset() kommt die
> > Warnung hingegen nicht.
>
> Ja, weil du denn Inhalt der Variable übergibst (call-by-value) und
> nicht die Variable - und der Inhalt nunmal nicht existiert
>
> mit
>
> function testf(&$sparam) {...
>
> wirst du dann wohl auf ein 'Wunder' stoßen ... ;-)

was heißt Wunder... :-) Die interessante Frage ist: Angenommen, isset() 
bekäme den Parameter als Referenz übergeben, warum ist das dann im 
Handbuch nicht ersichtlich? Zum Vergleich:

bool isset ( mixed var [, mixed var [, ...]] )

int preg_match ( string Suchmuster, string Zeichenkette [, array 
&Treffer [, int Flags [, int Versatz]]] )

Mich würde also einmal die exakte Erklärung dafür interessieren, warum 
es sich so verhält, wie es sich verhält. :-)


Viele Grüße
Lutz

php::bar PHP Wiki   -   Listenarchive