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

Reply via email to