Forse questo è strano domanda, ma non riesco a lavorare fuori cosa succede internamente in PHP quando si scrive:PHP per namespace
use garcha\path\class;
Non sto chiedendo circa scopo di spazi dei nomi, ma di questa affermazione in sé, anche se non fa alloca alcuna memoria, voglio dire, quando si dà anche un alias per un po 'di classe:
use garcha\path\class as withNewName;
dove viene archiviata? O come ricorda i nomi? Accade solo in fase di compilazione? e non eseguire il tempo? qualcosa come la semplice descrizione della funzione.
Se si ha familiarità con C, date un'occhiata alla realizzazione: http://lxr.php.net /xref/PHP_TRUNK/Zend/zend_compile.c#zend_compile_use. Ricorda i nomi memorizzandoli in una tabella hash (vedi anche zend_get_import_ht). E sì, la risoluzione alias è completamente in fase di compilazione. La VM non conosce gli alias dei nomi. – NikiC
Si può vedere di persona che è tempo di compilazione, facendo un semplice script come 'Test namespace { class MyClass {}} namespace { utilizzo test \ MyClass; } e quindi usare 'phpdbg' per scaricare gli opcode. Riceverai solo un ZEND_NOP perché non c'è alcun codice di runtime lì. – Leigh
lxr non funziona (maggio 2017). Utilizzare github https://github.com/php/php-src/blob/master/Zend/zend_compile.c#L6408 o avviare un contenitore docker https://hub.docker.com/r/itszero/opengrok/ – peter