<rant>
This yet again illustrates the sillyness of autoload, if we are going to
have a feature that autoloads classes it should be explicit in it's
usage:

autoload("Class_Name");

defaults to loading Class_Name.php ?
if __autoload exists, it calls that..

adding all sorts of magic to the Class operators is digging a hole that
you will be continually answering...
</rant>

Ok - got up the wrong side of bed this morning ;)
Regards
Alan





On Tue, 2005-06-28 at 14:32 -0700, James Crumpton wrote:
> I opened a bug (http://bugs.php.net/bug.php?id=33459) to report an issue with
> the default behavior of class_exists calling __autoload in PHP5. The bug was
> marked as bogus, and basically stated that it's PEARs problem. After 
> responding,
> the bug can now longer be searched for.
> 
> I believe this still requires some attention as the issues around it are very
> similar in nature to the ones with instanceOf and __autoload. (See
> http://news.php.net/php.internals/16746)
> 
> Basically, adding __autoload to any script using
> Calendar/DB_DataObject/SOAP/Validate (just to name a few) will throw a fatal 
> error.
> 
> Example being:
> 
> <?php
> require_once('Calendar/Calendar.php');
> 
> $cal = new Calendar();
> 
> function __autoload($name) {
>          require_once($name);
> }
> ?>
> 
> This isn't specific to PEAR however... any script/class that uses
> !class_exists() to load a file not in 'include_path' will fail when __autoload
> is used in conjunction.
> 
> Furthermore, I fail to see why such a "feature" is in place when it makes all
> existing if(!class_exists()) {} constructs worthless.
> 
> if (!class_exists($className)) {
>       // ... do something interesting ...
>       // well, with autoload defined, this block will never be reached.
>       // autoload will either load the class and the above condition will
>       // be false, or autoload will throw a fatal error and we never get here
> }
> 
> I just don't understand the logic behind throwing a fatal error when I'm 
> writing
> code to try and prevent one from occurring.
> 
> I realize a second parameter is available to class_exists that can be set to
> false, which will prevent __autoload from being called, but developers don't
> always have the luxury of modifying other peoples code to make it work they 
> way
> they intended it (such is the case with PEAR classes).
> 
> If someone really wants this behavior (though I can't understand for life of 
> me
> why), then allow them to pass TRUE as the second parameter, but leave the
> default be false. Or at the very least let autoload return false, so that the
> rest of the script can do it's thing... or maybe allow for a php.ini option to
> set the default behavior to false (though this option can make some scripts 
> less
> portable).
> 
> -james
> 

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

Reply via email to