Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:15739 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 75424 invoked by uid 1010); 3 Apr 2005 11:05:25 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 75409 invoked from network); 3 Apr 2005 11:05:24 -0000 Received: from unknown (HELO zend.com) (127.0.0.1) by localhost with SMTP; 3 Apr 2005 11:05:24 -0000 X-Host-Fingerprint: 80.74.107.235 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from ([80.74.107.235:41557] helo=mail.zend.com) by pb1.pair.com (ecelerity HEAD r(5268)) with SMTP id 69/E4-19272-3FDCF424 for ; Sun, 03 Apr 2005 07:05:24 -0400 Received: (qmail 17890 invoked from network); 3 Apr 2005 11:05:19 -0000 Received: from localhost (HELO zeev-notebook.zend.com) (127.0.0.1) by localhost with SMTP; 3 Apr 2005 11:05:19 -0000 Message-ID: <5.1.0.14.2.20050403125628.03f83de0@localhost> X-Sender: zeev@localhost X-Mailer: QUALCOMM Windows Eudora Version 5.1 Date: Sun, 03 Apr 2005 13:05:22 +0300 To: internals@lists.php.net Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Subject: __autoload() enhancement From: zeev@zend.com (Zeev Suraski) All, One problem that became apparent after the introduction of __autoload(), is that different pieces of code, sometimes coming from different sources, may want to declare this function in a different way. Today, __autoload() is treated like any other function, so it's impossible to re-declare it. Marcus tried to solve it by introducing an __autoload() wrapper in SPL. Personally I think it's probably not the right way to go, but that's beside the point right now. What I'd like to suggest is a change in the behavior of __autoload(), so that multiple __autoload()'s could be defined. Essentially, declaring __autoload() would in fact add the function to the list of functions that are called in case a missing class is referenced. However, it will not actually place a function named __autoload() in the PHP function table. That way, it would be possible to declare multiple __autoloads(), and have all of them called when a missing class is spotted. The two issues with this solution are: 1. It will be impossible to use the standard means to determine whether __autoload() is declared or not. I don't think that's a very important issue but it's there nonetheless. 2. We need to determine what makes sense as far as calling order if we have more than one __autoload(). My guess would be calling them in the order they were registered, and checking whether the class was defined after each one (if it was - stop). That solution maintains downwards compatibility (almost, other than issue #1). Thoughts? Zeev