Importieren von Klassen und Namespaces in PHP: Welchen Unterschied macht ein führender Backslash?

Was ist der Unterschied zwischen diesen beiden:

use Exception;
use \Exception;

Oder jene:

use Foo\Bar;
use \Foo\Bar;

Den Handbuch sagt:

Beachten Sie, dass für den Namespace-Namen (vollständig
qualifizierten namespace-Namen mit
namespace-separator, wie Foo\Bar
im Gegensatz zu globalen Namen
nicht, wie FooBar) der führende
backslash nicht notwendig und nicht
erlaubt ist, weil importierte Namen müssen vollständig sein
qualifiziert, und werden nicht verarbeitet
relativ zum aktuellen namespace.

Aber ich weiß nicht wirklich verstehen, weil alle der oben genannten Varianten arbeiten, d.h. es ist definitiv nicht "nicht erlaubt".

Einen Blick in zend_do_use zeigte sich, dass is_global (gesetzt, wenn es einen führenden backslash) wird nur eine Warnung in den folgenden Fällen:

namespace {
    use Exception;
}

Die mir sagt: "Die use-Anweisung mit nicht-zusammengesetzten Namen 'Ausnahme' keine Wirkung hat". (Obwohl das gleiche machen use \Exception hätte nur wenig Effekt, aber nicht werfen, eine Warnung.)

Also Bin ich etwas fehlt? Gibt es da eigentlich einen Unterschied?

InformationsquelleAutor der Frage NikiC | 2011-01-31

Schreibe einen Kommentar