Stanislav Malyshev wrote:
Hi!
I'm installing a recent snap of 5.3 on my dev server. The app I'm
working on makes heavy use of reflection. How has reflection changed
in 5.3 to address namespaces? What resolution rules apply when
creating a
Namespaces should not have big influence on reflection, since namespace
is just the logical partitioning of the class name - i.e. if the class
name is Foo::Bar::Baz, you can say that Foo::Bar is the namespace, but
for reflection you still use full class name.
ReflectionClass? If I try to create a ReflectionClass for a class
that is outside the current namespace, what will happen?
You should be able to use any class name with ReflectionClass. Since
namespaces are compile-time only, at runtime there's no such thing as
"current namespace".
Thanks for your response. Just to clarify,
- Class names are translated at compile time to include the namespace.
This composite is now considered to be the class name by the engine, and
the class name alone (i.e. "Baz") is no longer meaningful.
- Therefore, to reflect a class at runtime, the namespace must be included.
To continue your example, if I tried to do this:
$reflect = new ReflectionClass("Baz");
it would not work, regardless of the namespace of the file that
statement appears in. I must instead do this:
$reflect = new ReflectionClass("Foo::Bar::Baz");
Furthermore, there will never be a way to reflect a namespace, since the
concept of namespacing is essentially lost by the time the reflection
code would be executed.
Is this accurate?
Thanks,
Jeremy
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php