<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