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