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

Reply via email to