Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:45829 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 5826 invoked from network); 16 Oct 2009 14:32:57 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 16 Oct 2009 14:32:57 -0000 Authentication-Results: pb1.pair.com smtp.mail=sec@rack-soft.ro; spf=permerror; sender-id=unknown Authentication-Results: pb1.pair.com header.from=sec@rack-soft.ro; sender-id=unknown Received-SPF: error (pb1.pair.com: domain rack-soft.ro from 193.148.0.205 cause and error) X-PHP-List-Original-Sender: sec@rack-soft.ro X-Host-Fingerprint: 193.148.0.205 mailro.4psa.com Received: from [193.148.0.205] ([193.148.0.205:52140] helo=mailro.4psa.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 51/F7-02734-71488DA4 for ; Fri, 16 Oct 2009 10:32:57 -0400 Received: from localhost ([127.0.0.1]) by mailro.4psa.com for internals@lists.php.net; Fri, 16 Oct 2009 17:32:51 +0300 To: internals@lists.php.net Message-ID: <20091016143251.e95b77e5@mailro.4psa.com> Date: Fri, 16 Oct 2009 17:32:51 +0300 X-User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-----------cec780e0f46c7f26fa80507112fba85e" Subject: Autofunc patch (automatically loading functions like autoload) From: sec@rack-soft.ro ("Rack-Soft security") -------------cec780e0f46c7f26fa80507112fba85e Content-Type: multipart/alternative; boundary="-----------0995cabc199c7c0ba000a8403f718c3e" -------------0995cabc199c7c0ba000a8403f718c3e Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello, I am submitting quite an interesting patch to PHP 5.2.11 and PHP 5.3.0. = It is used in production on hundreds of machines without any issues. Basically the patch adds the autofunc function that performs quite in th= e same way like autofunc, only that it does it for functions. As do you = know, if PHP can not find a function it will issue a fatal error. With a= utofunc you can find the function somewhere and load it. Management of l= arge no OOP projects (or mixed OOP/procedural) is much easier with this.= I know that there are workarounds for loading functions, like adding th= em static to classes, but this is not efficient and involves important c= hanges to code. I have attached some PHP files to test with, you must execute index.php = that will load autofunc when the loaded functions can not be found. Let me know if you have any questions regarding the patch.=20 Best regards, Bogdan -------------0995cabc199c7c0ba000a8403f718c3e Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello,

I am submitting quite an interesting patch to PHP 5.2.11 a= nd PHP 5.3.0. It is used in production on hundreds of machines without a= ny issues.

Basically the patch adds the autofunc function that pe= rforms quite in the same way like autofunc, only that it does it for fun= ctions. As do you know, if PHP can not find a function it will issue a f= atal error. With autofunc you can find the function somewhere and load i= t. Management of large no OOP projects (or mixed OOP/procedural) is much= easier with this. I know that there are workarounds for loading functio= ns, like adding them static to classes, but this is not efficient and in= volves important changes to code.

I have attached some PHP files = to test with, you must execute index.php that will load autofunc when th= e loaded functions can not be found.

Let me know if you have any = questions regarding the patch.

Best regards,
Bogdan
-------------0995cabc199c7c0ba000a8403f718c3e-- -------------cec780e0f46c7f26fa80507112fba85e Content-Type: application/x-gzip Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="autofunc-php-5.2.11.tar.gz" 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 eAAA -------------cec780e0f46c7f26fa80507112fba85e Content-Type: application/x-gzip Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="autofunctest.tar.gz" H4sIAO6Y2EoAA+1XUW/aMBDmNf4V16oqIKESJwGksq3aw/Y09WnaHroKucEUa6ndJU5pNfW/z3YS EgKFTgOqtf4UCRyf75Kc77vPJJVikvJQ0kR2G7uB6wbuoNdTvwb1X/MfY6/fx9gf+P2Giz0few3o 7eh5FpAmksQAjVgIuc5u0/x/ClLNP+Njen9yO73dbgwXu+4gCJ7Mf+B5lfz7yj5QO6AB7nYfYzXe eP7fnal0IxTTXymLaasZsavuhCUjvSf0Tmi2h8uTetNEgowLA9TtwmcWJxJmFGT8AFIAvadhKikQ MNuLCQ5ySqS6zxKZAON6hkU0u8sS4EKCdkrH2t1XtR9vaKsNsynlMBEpH8OMRZExAaKMpzSuuc6d MB5GqXaDaDgVcPhFiJ+MXysn1QW5/9Mf/HCIitEQnX146YzsFwv1r/O7gxh/wf8B9hVPYN/tYcv/ +8BS/uv1vYUYG/gfuwM8z7+r9wnue75n+X8fyPhfE+6UVtgxZjTRLD5RkkCRK1W0GxIzJSZmPDfV RK6uOCYPcxYuGBgUR1OE5rajUbHdWkfFzXNyQ9vwGznXkbgiERx9Ox8Vcx0zyiZUl3EKPidjzec6 cu5u/jinsODYkLvDJtBiSUJlq+r8YsHysg3Hx1BaZUEv1iwoVozMuz97kXlXR/UiSsIpPHcZkASO MrvMgXOUf+R8NbyHw+IL5h9Mv7rj0DsStWrGbT3ziNSFnLy5jwQPKax5hKGxlWnMh+jxzbXJV4tV /I+3fATYpP/9Xtn/fRdr/R/gwPL/PpDxv7Okiw3JZHz7iUtF42PNt0tmnZKCFe/PRKyV9sHBQUa8 uYPvFGaEK+l/p6T8jWK+jm4tRsizSsT6SaEm5zsrDhfZWq/VzuPNx3pQsJVj6epprNR/xeFvSzE2 1r8blPofq/u45wf2/L8XmPoHc4JXZTqmYUTiUu0l+vgdl2ovgVCJvSuaHchPEKoKBiVBMimkqm9B SDSzsmxeKotmtcc0Vxt6C5ZebolKqVSNZGv7n7Cq/r0d9P/+mvr3vEr/x3n/x7b+94Gs/0OOWn/3 jA6AGjapArXqBD4uywIg14TxUhwU/bnwq9s0eunvYWFhYWFhYWFhYWFhYWHxGvEHwwiA5gAoAAA= -------------cec780e0f46c7f26fa80507112fba85e Content-Type: application/x-gzip Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="autofunc-php-5.3.0.tar.gz" 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 QYIECRIkSJAgQYIECRIkSLj38H+rUEe6AKAAAA== -------------cec780e0f46c7f26fa80507112fba85e--