On Friday, December 31, 2010 7:56:39 am Nicolas Grekas wrote:
> Dear all,
> 
> this RFC started by me having a problem on these subjects (not only me
> I think) :
> - namespaced functions and constants loading, or rather not-autoloading,
> - interfaces loading (this time, autoloading).

<snip>

> So, my first proposal for namespaced functions and constants is :
> 1. Remove namespaced functions and constants at all - promote
> namespaced public static methods and class consts instead.
> 
> This would fix static code analysis, and the discussion about how to
> autoload (I may say "how to package") namespaced functions and
> constants would vanish. About backward compatibility, who as written
> code relying on namespaced functions or constants? They are useless!

Dear god no!  Functions are already close to being second-class citizens in 
PHP at this point.  The project I work on (Drupal) is currently debating how 
to leverage function namespaces for our next version and there are several 
ways that we could do so effectively; mostly they come down to module == 
namespace, and then a "hook" (magic function callback) can be placed within a 
namespace.  That would actually make for clearer code than our current model.

Class == namespace is wrong.  Plain and simple.  It is a broken assumption 
based on broken understanding and the use of them that way is broken.  That 
approach is utterly useless if you want any sort of flexibility.

> My second proposal is :
> 2. At runtime, when a namespaced identifier is used (lets say
> \my\sub\ns\class_interface_constant_or_function), take the namespace
> part of the identifier and if any, autoload it as if it were a class,
> do not generate any error if the given class name is not found. (ie,
> trigger something like class_exists('my\sub\ns', true);).

I am not entirely sure I follow.  Are you suggesting that:

use Stuff\Things as Bar;
$foo = new Bar\Baz\Foo()

should trigger:

autoload('Stuff\Things\Baz\Foo');

AND

autoload('Stuff\Things\Baz')?

In the current approach I don't know how you'd properly resolve the "namespace 
portion" of the extended class/function/whatever name.  Honestly, combined 
with the previous proposal(s) for function autoloading (which I support in 
general)  it seems to me that we need to have separate but parallel pathways 
for autoloading different things; that could lead to better performance, too.  
If we can properly separate them I can see a use for "clustered" autoloading, 
certainly, and namespace is a not-unreasonable definition of cluster.

> Cons :
> - none
> - well, one : I don't speak C, so I don"t have any patch...

I sadly have the same problem. :-)

--Larry Garfield

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to