Come posso recuperare automaticamente uno spazio dei nomi di classe?Ottieni dinamicamente lo spazio dei nomi della classe PHP
La magia var __NAMESPACE__
è inaffidabile perché in sottoclassi non è definito in modo corretto.
Esempio:
class Foo\bar\A
->__NAMESPACE__
=== Foo \ bar
class Ping\pong\B extends Foo\bar\A
->__NAMESPACE__
=== Foo \ bar (va Ping \ pong)
ps: ho notato lo stesso comportamento errato usando __CLASS__
, ma ho risolto usando get_called_class()
... c'è qualcosa come get_called_class_namespace()
? Come posso implementare tale funzione?
UPDATE:
Penso che la soluzione è nella mia stessa domanda, dal momento che mi sono reso conto get_called_class()
restituisce il nome completo della classe e quindi posso estrarre lo spazio dei nomi da esso: D ... Comunque se v'è una più efficace approccio fammi sapere;)
La soluzione è quello che ho avuto a che fare in codice personale. http://codepad.viper-7.com/EgObtf –
Quello che descrivi non è un comportamento sbagliato. Scopri cosa contengono queste costanti: http://php.net/language.constants.predefined e, come hai trovato una soluzione al tuo problema, puoi rispondere alla tua domanda. – hakre
Controlla questo. Penso che questo sia quello che vuoi dire: http://stackoverflow.com/questions/2317343/get-child-class-namespace-from-superclass-in-php/20193599#20193599 – Chris