#31214 [Opn->Fbk]: overloading using __call() initially OK, fails on any subsequent method call
| From: | alan_k@php.net | Date: | Tue, 21 Dec 2004 01:37:41 +0000 |
| Subject: | #31214 [Opn->Fbk]: overloading using __call() initially OK, fails on any subsequent method call | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-70750@lists.php.net to get a copy of this message | ||
ID: 31214
Updated by: alan_k@php.net
Reported By: ebypdx at comcast dot net
-Status: Open
+Status: Feedback
Bug Type: Class/Object related
Operating System: Solaris 5.8
PHP Version: 4.3.10
Previous Comments:
------------------------------------------------------------------------
[2004-12-21 02:35:50] alan_k@php.net
a) make sure you are not using any Zend extension eg.
Optimizer/xdebug/apc etc.
have a look at this report
http://bugs.php.net/?id=31106
see if reverting the mentioned change to zend_execute fixes this.
------------------------------------------------------------------------
[2004-12-21 02:28:35] ebypdx at comcast dot net
I've also seen it fail out with a different fatal error "call to
undefined function". i can't determine how to make it do this instead
of giving "call on a non-object."
------------------------------------------------------------------------
[2004-12-21 02:26:26] ebypdx at comcast dot net
Description:
------------
in the most simple case, create a class with no methods except __call()
and overload it. start calling methods on an instance of that class.
the first method call will hit __call() and finish correctly. any
subsequent method calls will fail to hit __call(), resulting instead in
a fatal error.
if this is indeed a bug... i realize due to the experimental nature of
overloading in 4.3, that this may never work again. my deepest thanks
to anybody who can address this.
Reproduce code:
---------------
<?php
class BaseOverloader {
function BaseOverloader() {}
function __call($method, $args, &$returnValue) {
echo "Call to ".get_class($this)."->$method <br/>";
$returnValue = "return";
return true;
}
}
overload("BaseOverloader");
$c = new BaseOverloader();
$c->firstCall();
$c->secondCall();
?>
Expected result:
----------------
Call to BaseOverloader->firstcall
Call to BaseOverloader->secondcall
Actual result:
--------------
Call to baseoverloader->firstcall
Fatal error: Call to a member function on a non-object in
/export/vol01/opt/web/neby/partner.newedgenetworks.com/overloaded.php
on line 13
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31214&edit=1