php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #29716 __call with wrong no. of arguments prevents simple BC wrappers.
Submitted: 2004-08-17 06:01 UTC Modified: 2004-08-20 05:51 UTC
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: alan at akbkhome dot com Assigned:
Status: Wont fix Package: Scripting Engine problem
PHP Version: 5.* OS: *
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: alan at akbkhome dot com
New email:
PHP Version: OS:

 

 [2004-08-17 06:01 UTC] alan at akbkhome dot com
Description:
------------
something changed in 5.0.1 that breaks conditional class definitions. hence breaking code that worked ok on php4 & php5.0.0

Reproduce code:
---------------
<?php
if (true) { // this is the correct definition. (used for php5)

    class Overloaded {
        function __call($method,$args) {
           
        }
    }
    
    
} else { // this is used for php4
                                                                               
    class Overloaded {
        function __call($method,$args,&$return) {

        }
    }
 }                                                                               
?>

Expected result:
----------------
nothing


Actual result:
--------------
Content-type: text/html
X-Powered-By: PHP/5.0.1
 
<br />
<b>Fatal error</b>:  Method DB_DataObject_Overload::__call() must take exactly 2 arguments in <b>/usr/src/php/php-5.0.1/test1.php</b> on line <b>16</b><br />
a

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-08-17 06:21 UTC] alan_k@php.net
Relivant change
http://cvs.php.net/diff.php/ZendEngine2/zend_compile.c?ws=0&r1=1.567&r2=1.567.2.1&ty=u

I suggest testing for > 1, rather than != 2 on call, as that's the only one who's API changed in PHP4->5

 [2004-08-17 08:15 UTC] derick@php.net
Marcus breaks it, marcus should fix it :)
Also, can you please add a test case for this?

thanks
 [2004-08-17 09:18 UTC] helly@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

We no longer support ext/overload (and ext/aggregation). In PHP 5 __autoload was reimplemented as a new different feature even though it is in some manner meant to be able to replace the old behavior. But it is meant to do it etter and offer more. Hence unfortunatley those two are different things and yes we broke BC.
 [2004-08-17 09:25 UTC] helly@php.net
Btw. ext/overload:
This extension is EXPERIMENTAL. The behaviour of this extension -- including the names of its functions and anything else documented about this extension -- may change without notice in a future release of PHP. Use this extension at your own risk
 [2004-08-20 05:50 UTC] alan_k@php.net
changing status to reflect situation.  

Probably the best workaround to offer overload PHP4/PHP5 compatiblity is to use eval to create a base class eg.

eval('
        class PHP4_Overload {
            function __call($method,$args,&$return) {
                return $this->_call($method,$args,$return);;
            }
        }
    ');

 [2004-08-20 05:51 UTC] alan_k@php.net
changing title (oops)
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Apr 23 20:01:29 2024 UTC