Vielleicht ist diese seltsame Frage, aber ich kann es nicht herausfinden, was intern in php passiert, wenn Sie schreiben:PHP-Anweisung für Namespace
use garcha\path\class;
Ich bin nicht über Zweck der Namensräume zu fragen, sondern um diese Aussage selbst, auch nicht auf diese auf keinen Speicher, ich meine, wenn Sie auch ein Alias für einige Klasse geben:
use garcha\path\class as withNewName;
Wo ist es gespeichert? Oder wie erinnert es sich an die Namen? Tritt es nur zur Kompilierzeit auf? und keine Laufzeit? etwas, das nur die Funktion beschreibt.
Wenn Sie mit C vertraut sind, nehmen Sie einen Blick auf die Umsetzung: http://lxr.php.net /xref/PHP_TRUNK/Zend/zend_compile.c#zend_compile_use. Er speichert die Namen in einer Hashtabelle (siehe auch zend_get_import_ht). Und ja, Alias-Auflösung ist vollständig Kompilierzeit. Die VM kennt keine Namespace-Aliase. – NikiC
Sie können selbst sehen, dass es Zeit ist, kompilieren, indem ein einfaches Skript wie 'Namespace-Test machen { class MyClass {}} Namespace { Verwendung Test \ MyClass; } 'und dann' phpdbg' verwenden, um die Opcodes auszugeben. Sie erhalten nur einen ZEND_NOP, da dort kein Laufzeitcode vorhanden ist. – Leigh
lxr ist down (Mai 2017). Verwende github https://github.com/php/php-src/blob/master/Zend/zend_compile.c#L6408 oder starte einen Docker-Container https://hub.docker.com/r/itszero/opengrok/ – peter