Jaroslav Hanslík wrote:
> David Grudl napsal(a):
>> Hello!
>>
>> This code leads to fatal error: Class 'Nette\Loaders\Nette\Object'. Is
>> it a bug in current implementation or namespace resolution rules has
>> been changed?
>>
>> namespace Nette;
>>
>> class Object
>>
>> {}
>>
>> namespace Nette\Loaders;
>>
>> class AutoLoader extends Nette\Object
>>
>> {}
>>
>> $obj = new AutoLoader;
>>
>>
>>
>> Thank you,
>> David Grudl
>
> I'm maybe wrong but I think that namespace resolution rules has been
> changed. This should work:
>
> namespace Nette\Loaders;
>
> class AutoLoader extends \Nette\Object
> {}
Hi,
The resolution rules have changed in that way. The reason was an
inconsistency:
<?php
// Autoload extends Sub\Object
class Autoloader extends Sub\Object {}
// Another extends Object
class Another extends Object {}
?>
versus this code:
<?php
namespace Nette;
// Nette\Autoload extends Sub\Object
class Autoloader extends Sub\Object {}
// Nette\Another extends Nette\Object
class Another extends Object {}
?>
The problem was that it isn't immediately clear why we would consider
"Sub\Object" to be the same as "\Sub\Object", but "Object" to be
different from "\Object" inside a namespace context, but the same
outside a namespace context.
This is an important thing for developers of namespaced code to realize.
The docs have been updated in my personal checkout of php-doc, and I am
revising them to make them clearer, and also waiting on a few other
details to make it into CVS before committing.
Thanks,
Greg
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php