Edit report at https://bugs.php.net/bug.php?id=54555&edit=1
ID: 54555 Updated by: ni...@php.net Reported by: dinamic at gmail dot com Summary: Late static binding effect for __NAMESPACE__ -Status: Open +Status: Wont fix Type: Feature/Change Request Package: *General Issues Operating System: Linux PHP Version: 5.3.6 Block user comment: N Private report: N New Comment: The __FOO__ style constants are compile-time scalars. They don't resolve at runtime and also don't have any kind of late binding behavior. E.g. if you use __CLASS__ it will also be the class name of the class it occurred in, not the name of some inheriting class. Instead you could for example get the namespace using (new ReflectionClass($this))->getNamespaceName() In static code (without $this) you could also use get_called_class and take everything until the last slash. Previous Comments: ------------------------------------------------------------------------ [2011-04-18 09:15:54] dinamic at gmail dot com Description: ------------ I've been chilling around with the latest PHP features and noticed that there is something missing - there is no way to get the current namespace if inheriting some implementation, which limit us on some implementations. For example, we have an abstract class in one namespace and adapter for the very same class in another namespace. If we try to use the __NAMESPACE__ within the abstract class, it uses its own one and not the one of the inheriting class. I've checked the documentation to find some notes on this one to no avail. Test script: --------------- <?php namespace SomeNamespace { abstract class SomeAdapterAbstract { public function getNamespace() { return __NAMESPACE__; } } } namespace SomeNamespace\Adapters { use \SomeNamespace\SomeAdapterAbstract; class SomeAdapter extends SomeAdapterAbstract {}; $adapter = new SomeAdapter; var_dump($adapter->getNamespace()); } Expected result: ---------------- nikola@nikola-pc:~$ php test2.php string(13) "SomeNamespace\Adapters" Actual result: -------------- nikola@nikola-pc:~$ php test2.php string(13) "SomeNamespace" ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=54555&edit=1