Ich fasse zusammen:
class Foo\Bar {}
gibt
Zitat:
Parse error: syntax error, unexpected T_NS_SEPARATOR, expecting '{' in test.php on line 3
class Foo:Bar {}
gibt
Zitat:
Parse error: syntax error, unexpected ':', expecting '{' in test.php on line 3
class Foo/Bar {}
gibt
Zitat:
Parse error: syntax error, unexpected '/', expecting '{' in test.php on line 3
So, jetzt noch mit deinem Code: mit einem : gibt's nen Parse error, mit nem / wird "Foo" uebergeben, mit nem \ wird "Bar\Foo" uebergeben.
Das heisst, du solltest wirklich nichts ersetzen, denn den Namespace kannst du (wenn richtig gemacht) direkt mit nem ".php" am Ende versorgen und dann nen file_exists() machen.
Aber ich hatte irgendwo gelesen, daß z.B. bei einem direkten Aufruf von spl_autoload_call oder eben deinem new $foo(); , vorallem in Verbindung mit Usereingaben, da auch "Verzeichnisse" mit übergeben werden könnten.
Also, mein Code ausm PS ist ein Beispiel das du so nie machen solltest. Das ist ein Sicherheitsleck hoch 10. Auch einen direkten Aufruf von spl_autoload_call solltest du nie brauchen, und falls doch dann solltest du da keinen User-Generated content reinstopfen. Es gibt wirklich
keinen Grund, UGC in eine solche Funktion zu schieben. Ganz ehrlich: Sicherheit sollte an der ersten Stelle stehn, das ist wohl klar. Das was du aber machst ist an der falschen Ecke gespart. Ueberleg dir wie du deine Anwendung baust und was PHP als gueltig betrachtest und du wirst nicht bei jedem Autoload-Call einen dummen, langsamen String-Replace machen muessen.
Greetz
alcaeus