Lieber MudGuard,
was hat's mit den Backslashes auf sich?
mein Projekt bindet fremde Skripte ein, die ihrerseits Namespaces verwenden, also verwendet mein Projekt auch welche. Das bedeutet, dass Klassennamen mit dem passenden Namespace notiert werden müssen (nicht können). Wenn Du mit dem use-Operator Aliase definierst, um z.B. Schreibarbeit zu sparen, dann kannst Du für diesen Namespace die Backslashes weg lassen:
namespace MyProject;
use \OtherProject\SomeNameSpace
class Project {
}
$a = new \MyProject\Project(); // geht immer
$b = new Project(); // geht, weil im passenden Namespace
$c = new \OtherProject\SomeNameSpace\SomeClass(); // geht immer
$d = new SomeClass(); // funktioniert intern wie bei $c wegen `use`-Operator oben
Wenn Du nun eine Funktion aufrufen willst, muss klar sein, in welchem Namespace diese liegt.
namespace MyProject;
function chr ($x) {
return $x + 1234;
}
$a = chr(65); // 1299
$b = \chr(65); // 'A'
Wenn in einem Namensraum eine Funktion mit einem Namen definiert wird, für die es in einem anderen Namensraum eine gleichlautende gibt, welche ist dann beim Funktionsaufruf gemeint? Für die Variable $a ist das klar, weil das im Namensraum MyProject steht, also die Funktion \MyProject\chr gemeint ist. Will man die altbekannte Funktion chr aus dem globalen Namensraum haben, muss man das wie bei Variable $b notieren.
Liebe Grüße
Felix Riesterer