ID:               29716
 Updated by:       [EMAIL PROTECTED]
-Summary:          Critical - conditional class definitions are compiled
                   and produce errors
 Reported By:      alan at akbkhome dot com
-Status:           Bogus
+Status:           Wont fix
 Bug Type:         Zend Engine 2 problem
 Operating System: *
 PHP Version:      5.*
 Assigned To:      helly
 New Comment:

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);;
            }
        }
    ');



Previous Comments:
------------------------------------------------------------------------

[2004-08-17 09:25:48] [EMAIL PROTECTED]

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-17 09:18:32] [EMAIL PROTECTED]

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 08:15:28] [EMAIL PROTECTED]

Marcus breaks it, marcus should fix it :)
Also, can you please add a test case for this?

thanks

------------------------------------------------------------------------

[2004-08-17 06:21:19] [EMAIL PROTECTED]

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 06:01:38] 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


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=29716&edit=1

Reply via email to