Edit report at https://bugs.php.net/bug.php?id=62162&edit=1

 ID:                 62162
 Comment by:         judev at cuttlefish dot com
 Reported by:        lcfsoft at gmail dot com
 Summary:            Autoloading for namespaces
 Status:             Open
 Type:               Feature/Change Request
 Package:            *General Issues
 PHP Version:        5.4.4RC1
 Block user comment: N
 Private report:     N

 New Comment:

> But still - weird, mostly useless and overkill to implement just because 
someone does not like :: in his identifier.

I disagree that this is mostly useless - far from it. If we had autoloading 
based 
on namespace access then namespace-based package/bundle management becomes 
trivial.
Frameworks are having to implement this themselves at present, to take an 
example 
from Laravel we have to call:
Laravel\Bundle::start($bundle_name);
before we can access code in that bundle. Would be great if instead we could 
use 
the existing language features and just use a namespace to automatically load 
that bundles code.


Previous Comments:
------------------------------------------------------------------------
[2012-05-29 13:50:40] rpycka at gmail dot com

I would also like to see this feature, especially in the context of function 
autoloading and procedural programming.

1) It would make PP in PHP way more pleasant & effective (no need to spam 
guards like require_once, no need for indirect dispatchers, obviously, not 
loading code you don't need for particular request).
For a language that grew on procedural programming paradigm it's a shame 
development in this area has been stalled for so many years (afair nothing have 
changed since 4 in this regard).

2) There is a lot of code that could profit, e.g. Drupal.

3) Hacking with classes has its cons, eg. performance (what would be relative 
difference between direct function call vs static method call and indirect 
(callbacks)?).

4) How hard can it be? Checking for registered callback and running the 
procedure before firing error.

Proposed interface by shiranai7 at hotmail dot com looks ok.

------------------------------------------------------------------------
[2012-05-28 18:24:24] shiranai7 at hotmail dot com

lcfsoft at gmail dot com,

>>> Zend_Crypt_Math_BigInteger_Bcmath, because, you see, the functionality is 
>>> IDENTICAL to what  we have with Zend\Crypt\Math\BigInteger\Bcmath now.

Yes, namespaces were introduced as a better alternative to ugly identifier 
prefixes. But this has nothing to do with "autoloading functions".

--

My point is that this approach is rather unusual. Bunch of class-less functions 
defined in a file is like pre-php 5 procedural code. Of course I am in no 
position to tell anyone what is the correct way to organise their code or even 
decide whether this will get eventually implemented or not.

My proposal for this would be something like:

  spl_function_autoload_register( callback(function) )
and
  spl_constant_autoload_register( callback(constant) )
or
  spl_ns_autoload_register( callback(namespace, property ,type) )

But still - weird, mostly useless and overkill to implement just because 
someone does not like :: in his identifier.

------------------------------------------------------------------------
[2012-05-28 16:56:10] lcfsoft at gmail dot com

shiranai7 at hotmail dot com,

If your mindset towards this problem was valid we wouldn't need to have 
namespaces 
introduced and implemented in the first place. We would all be fine with those 
Zend_Crypt_Math_BigInteger_Bcmath, because, you see, the functionality is 
IDENTICAL to what 
we have with Zend\Crypt\Math\BigInteger\Bcmath now.

If I need to make an abstract static class's method instead of a function to 
achieve 
something - it's nothing but a hack. It may work, it may work the same way - 
but 
it's a 
hack.
 So yes, I really do need that "\" instead of "::".

>> You cannot expect anything to be loaded just by an "use" statement. It just 
defines a 
local alias for a class or namespace. The classes get loaded only when they are 
actually 
used.

What you said here, however, is correct. So, yes, it may not be so trivial as 
adding another 
line of code.

But it's important I believe. Why limit PHP developers to classes? If you want 
to know why 
we shouldn't - check out any other decent programming language e.g. Python. 

Yes, autoloading for classes exclusively might work before as we didn't have 
any 
sort of 
namespaces/packages AT ALL - but now we do and this should be revisited.

------------------------------------------------------------------------
[2012-05-28 16:23:58] shiranai7 at hotmail dot com

lcfsoft at gmail dot com,
You cannot expect anything to be loaded just by an "use" statement. It just 
defines a local alias for a class or namespace. The classes get loaded only 
when they are actually used.

Based on your example I think that you are looking for a way to "autoload 
functions". While it could possibly be handy in your case, I dont think it will 
ever be an actual feature. It is not even possible to import a function or 
constant through the "use" statement, so why this?

Using an abstract class is not "hacking around" in this case. Why do you need 
to do this:

dispatching\dispatch(...);

if you can do this?

dispatching::dispatch(...);

The functionality is IDENTICAL, with added bonus of possible autoloading. Do 
you really need that \ instead of :: ? That is the only actual difference.

------------------------------------------------------------------------
[2012-05-28 15:31:07] lcfsoft at gmail dot com

shiranai7 at hotmail dot com,
why would I use a class if I don't need a class?

Anyway, ways to hack around are well know. The idea here is that we wouldn't 
need 
to "hack around". Since we have namespaces - it can be done.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=62162


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=62162&edit=1

Reply via email to