Zuerst mal: if ($xx==...)setzt die Variable nur, wenn sie nicht vorher definiert wurde, das Verfahren nennt man Call by Reference. Das bedeutet, wenn eine Variable ausgelesen wird, ohne dass sie vorher definiert wurde, wird sie mit '' definiert. Das ist gewollt so, und ist eine Art der Variablen Definition.
Aber in der neuesten PHP Version, wird Call by Reference nicht mehr unterstützt, jetzt geht nur noch Call by Value, also Variablen MÜSSEN zuerst mit $xx= gesetzt werden.
Nein, da hast Du etwas falsch verstanden (oder es wurde falsch erklärt:). Du kannst auch in den neueren PHP-Versionen auf nicht-existierende Variablen zugreifen. Der Unterschied wird vielmehr sein, daß in der PHP-Konfiguration eine Einstellung geändert wurde, so daß die Warnung vor diesen Zugriffen (bzw. Warnungen allgemein) nicht mehr verschluckt werden.
Es handelt sich hier auch nur um eine Warnung, weil es zwar prinzipiell etwas unsauber ist, etwas zu benutzen, von dem man keine Ahnung hat, was drin ist, aber im Falle von PHP kein allzu schwerwiegender Fehler, da PHP Variablen automatisch "leert" (wie Du ja beschrieben hast).
Worum es aber eigentlich geht:
Wenn es um "by reference" und "by value" geht, dreht es sich eigentlich immer nur um die Möglichkeit, Variablen an Funktionen zu übergeben ("by reference") oder nur ihren Wert ("by value"). Und hier gibt es dann auch die von Dir wahrscheinlich befürchtete Einschränkung:
function test($x)
{
$x++;
};
$a="1";
test(&$a);
Dieses Skript wird mit der Warnung
"Call-time pass-by-reference has been deprecated - argument passed
by value; If you would like to pass it by reference, modify the
declaration of test()."
quitiert. Es ist also nicht mehr standardmäßig möglich, eine Variablenreferenz ('test(&$a)', man beachte das Und-Zeichen & vor $a) an eine Funktion zu übergeben, sondern nur noch den Wert einer Variablen. Letzteres passiert, wenn test() mit $a, also ohne &, aufgerufen wird.
Die Alternative, auf die in der Warnung hingewiesen wird, ist die Übernahme der Referenz in die Funktionsdeklaration:
function test(&$x)
Hier wird dann nicht mehr der Wert einer Variable übernommen, sondern $x wird zu einem Alias für die übergebene Variable $a (und verändert dementsprechend nicht nur den Inhalt von $x in der Funktion, sondern gleichzeitig auch jenen von $a im aufrufenden Code).
Zweitens: Hab mich geirrt, Apache sucht kein Verzeichnis, sondern meldet mir einen Internal Server Error, wenn ich zum Beispiel index.php/usdfg aufrufe. Aus der Log Datei sehe ich, dass der Error vom PHP Interpreter herrührt. Der unterstützt bei mir also diese Methode nicht. Nutze die WAMP Installation (PHP läuft in dieser als CGI)
Sehr merkwürdig. Am cgi-handler vom Apache kann es eigentlich nicht liegen, schließlich ist erstens PATH_INFO eine Standard-CGI-Variable (siehe http://hoohoo.ncsa.uiuc.edu/cgi/env.html) und kommt der Fehler zweitens Deiner Aussage nach von PHP. Daß der PHP-Interpreter die CGI-Variablen nicht auslesen kann, kommt mir allerdings ebenso extrem spanisch vor. Was ist denn das für eine Fehlermeldung genau?
Gruß,
soenk.e