|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #31214 overloading using __call() initially OK, fails on any subsequent method call
Submitted: 2004-12-21 02:26 UTC Modified: 2005-01-07 09:01 UTC
Avg. Score:5.0 ± 0.0
Reproduced:3 of 3 (100.0%)
Same Version:3 (100.0%)
Same OS:1 (33.3%)
From: ebypdx at comcast dot net Assigned:
Status: No Feedback Package: Class/Object related
PHP Version: 4.3.10 OS: Solaris 5.8
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please — but make sure to vote on the bug!
Your email address:
Solve the problem:
43 - 5 = ?
Subscribe to this entry?

 [2004-12-21 02:26 UTC] ebypdx at comcast dot net
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:
class BaseOverloader {
    function BaseOverloader() {}
    function __call($method, $args, &$returnValue) {
        echo "Call to ".get_class($this)."->$method <br/>";
        $returnValue = "return";
        return true;
$c = new BaseOverloader();

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/ on line 13


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2004-12-21 02:28 UTC] 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:35 UTC]
a) make sure you are not using any Zend extension eg. Optimizer/xdebug/apc etc. 

have a look at this report

see if reverting the mentioned change to zend_execute fixes this.
 [2004-12-21 02:45 UTC] ebypdx at comcast dot net
i believe we aren't using any of those extensions.  i will double-check with the sysadmin team.

can you give me a tip on how to revert that change?  when i follow the link to cvsweb from report 31106 i get a "malformed query" page.
 [2004-12-21 03:04 UTC]
in Zend/zend_execute.c

about line 997: remove this line 	

about line 1579: remove this line


you have to copy & paste the whole link for it to work / rather than just pressing on it.

 [2004-12-21 03:58 UTC]
Try the patch listed in bug report #31106
 [2004-12-21 17:33 UTC] ebypdx at comcast dot net
thanks very much for the feedback, if our sysadmins have time to apply that patch i'll post back the results.  for now we've rolled back a version.
 [2004-12-21 18:05 UTC]
leave bug @ feedback until further information is known.
 [2004-12-29 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2005-01-07 03:41 UTC] patrick at arkeon dot com
A "not real" solution about the "Call to a member function on a non-object"

Try this:
// Only to avoid the problem...
class Dummy { 
	function Dummy() {
$toto =& new Dummy();

class BaseOverloader {
    function BaseOverloader() {}
    function __call($method, $args, &$returnValue) {
        echo "Call to ".get_class($this)."->$method <br/>";
        $returnValue = "return";
        return true;
$toto = new BaseOverloader();

Then you got:
Call to baseoverloader->firstcall 
Call to baseoverloader->secondcall 

Weird, no?!?
 [2005-01-07 09:01 UTC]
try - this should be fixed now.
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Jun 20 03:01:31 2024 UTC