On Nov 4, 2011, at 7:19 AM, Anthony Ferrara wrote:

> Jonathan,
> 
>> The problem with spl_autoload_register() is it isn't clear what the
>> autoloading function is supposed to do if the class if not found.
> 
> Then that's a documentation problem.  If you throw an exception in
> yours, sure that's going to cause problems for anyone else.  It's 100%
> possible (and easy) to play nice.
> 
> But that brings up another problem with PSR-0.  It's possible to use
> 100% valid PHP and have it throw a fatal error.
> 
> Let's assume a file exists named foo/bar.php
> 
> new foo\bar;
> new foo_bar;
> 
> That will fatal error 100% of the time (as long as both of those
> classes aren't in that file), since they both map to the same file,
> *and* PSR-0 mandates require instead of require_once.  So even if I
> declare an autoloader later to load my foo_bar class, it won't work
> because it'll never get there.
> 
> Additionally, since it's not checking the existance of the file, it's
> impossible for me to add a class to an existing namespace from outside
> of its root.  Say we have /lib/foo/bar/baz.php.  If I wanted to add a
> class \foo\bar\bat.php, I'd **have** to add it to that directory,
> other wise I'd get a fatal error.  It's not a far cry.  That's
> basically what Kohana does right now with their autoloader...
> 
> So that's two more inconsistencies with what's 100% valid PHP but
> could cause fatal errors with PSR-0.
Exactly.  spl_autoload_register provides the ability for autoloading to work 
among systems.  What it does *not* do is define the layout of files/file 
systems or what should happen upon a file not found.  As Jonathan noted, this 
is a documentation problem.  Implementing a new bit of functionality for the 
purpose of offering a standard is wrong IMHO.  The other problem is this would 
only *offer* a standard.
> 
> @Ferenec
> 
>> I think that the best solution would be having a generic autoloader 
>> infrastructure in the core, and having separate autoloading 
>> strategies(http://en.wikipedia.org/wiki/Strategy_pattern) offered, and one 
>> of them could be PSR-0(we could also add the PEAR/PEAR2 autoloader, etc.).
> 
> That's something that I could get behind..
This still feels like a docs issue.  spl_autoload_register provides everything 
you need to create your own autoloader.  This suggestion would just add more 
overhead if implemented in  core (if that is your intent). 

Will

> 
> @Andre
> 
>> It will be a more modern alternative to 
>> http://www.php.net/manual/en/function.spl-autoload.php
> 
> And I don't feel that function belongs in the core at all either.
> It's there, so whatever, but at least that's consistent with how PHP
> behaves...
> 
>> So yes, there is already something like this in core, so I really don't get 
>> why you are so against this, not seeing the wood for the trees? :)
> 
> Well, nothing like this exists in core.  First, PSR-0 doesn't degrade
> gracefully.  If it can't map, it fatal errors.  Nothing else does so
> in the core in an area where it's 100% possible to recover anyway.
> Secondly, nothing in the core requires you to adhere to a code-level
> convention for it to work.  I'm sure there are more arguments against
> that, but eih.
> 
> Not seeing the forest for the trees?  On the opposite.  I see what
> this will open up if included.  Why can't my autoloader be put in the
> core when PSR-0 is in it?  Based on what you said, it's 100% optional,
> so why not?  Should Runkit be put in core?  Sure, it's optional to
> use, so why not?  Heck, while we're at it, all of PECL should be moved
> in core.  Who cares how stable or nice they interact with the core.
> After all, the core of the language is not like it's widely used by
> others.
> 
> The language should care about *possibility* not picking a side when
> it's trivial to implement in PHP land.  You're talking about saving 8
> or 10 lines of PHP code...  So I would argue that it's more not seeing
> the forest because you're looking too close at one tree...
> 
> Anthony
> 
> 
> 
> On Fri, Nov 4, 2011 at 6:43 AM, Jonathan Bond-Caron <jbo...@openmv.com> wrote:
>> On Thu Nov 3 03:06 PM, Will Fitch wrote:
>>> Wouldn't you consider spl_autoload_register an interoperability
>>> solution?  Only your defined autoloading function would then need to
>>> know how your file system is structured, there'd be no need for
>>> include_path declarations and you wouldn't have to explicitly declare
>>> paths for each class.
>>> 
>> 
>> The problem with spl_autoload_register() is it isn't clear what the
>> autoloading function is supposed to do if the class if not found.
>> So no I don't think spl_autoload_register() solves an interoperability
>> problem. SplClassLoader somewhat does a better job by forcing a common
>> implementation...
>> 
>> function FrameworkA_autoload($class) {
>>  if( !isset($AmapToFile[$class]) )
>>     throw new Exception('Class '. $class . ' not found!');
>> 
>>  include_once($AmapToFile[$class]);
>> }
>> function FrameworkB_autoload($class) {
>>  require_once($BmapToFile[$class]);
>> }
>> function FrameworkC_autoload($class) {
>>  include_once($CmapToFile[$class]);
>> }
>> 
>> spl_autoload_register('FrameworkA_autoload');
>> spl_autoload_register('FrameworkB_autoload');
>> spl_autoload_register('FrameworkC_autoload');
>> 
>> So both 'FrameworkB_autoload', 'FrameworkC_autoload' are never called.
>> 
>> Btw, I would hope that any 'standard' would actually that try to talk about
>> other autoloaders and how they should behave.
>> 
>> https://gist.github.com/221634
>> 
>> See comments about include() or require()
>> 
>> 
>> 


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

Reply via email to