Mailinglisten-Archive |
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