Mailinglisten-Archive |
Hallo Andreas, Am Samstag, 17. März 2007 11:43 schrieb Andreas Ahlenstorf: > Am 17.03.2007 um 11:34 schrieb Lutz Zetzsche: > > 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: > > Nicht isset() bekommt die Referenz, sondern die Funktion. In der > Funktion ist die Referenz eine Variable, insofern gibt's du isset() > eine Variable mit einer Referenz und nicht eine Referenz ;) Die > Übergabe Variable->Referenz->Funktion gibt keine Notice, weil PHP > automatisch einen Eintrag in der Symboltabelle erstellt, bevor die > Evaluierung erfolgt. Insofern existiert dann die nicht existente > Variable für PHP, auch wenn sie eigentlich nicht da ist. > > Ich hoffe, ich hab's halbwegs verständlich und richtig erklärt ;) ich glaube, ja. Ich fasse aber zur Sicherheit noch einmal kurz in meinen Worten zusammen: Man kann also einem Sprachkonstrukt irgendetwas übergeben, weil das Sprachkonstrukt selbst keine Funktion ist. Intern ruft das Sprachkonstrukt dann aber eine oder mehrere Funktionen auf, um seine Aufgabe zu erledigen. isset gibt den ihm übergebenen Parameter als Referenz an die Funktion weiter. echo gibt den Parameter hingegen offensichtlich als Wert weiter. Daher kommt ggf. bei echo eine "Undefined Index"-Warnung und bei isset nicht. Richtig soweit? :-) Dann habe ich aber zu Deiner Erklärung noch eine Frage: Wenn PHP innerhalb von isset vor der Evaluierung schon automatisch einen Eintrag in die Symboltabelle macht, wie kann die Funktion dann noch herausfinden, daß die Variable vielleicht nicht existiert? Wo merkt sich PHP das, daß es den Eintrag in die Symboltabelle erst innerhalb von isset gemacht hat? Bzw. wie Symboltabelle aus? Steht da vielleicht drin, "wer" wann den Eintrag gemacht hat? Ich hoffe, daß wird jetzt nicht zu speziell, aber wenn, dann würde ich es gerne richtig und ganz verstehen. :-) Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive