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

 ID:                 52713
 Comment by:         giovanni at giacobbi dot net
 Reported by:        michael at wakeless dot net
 Summary:            Can't call undefined methods (using __call) on
                     parent
 Status:             Open
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   All
 PHP Version:        5.3.3
 Block user comment: N

 New Comment:

@michael: I think the situation is perfectly clear. I think they screwed
up on this one.



@felipe: this change is absolutely not reasonable and breaks backward
compatibility. I understand that the behaviour for #51176 is
inconvenient, but that's the way it is, you cannot change this in a
minor release.



My suggestion (and wish) is that you revert this change to the previous
behaviour. Shall we discuss this in the internals mailing list? Sounds
like an interesting issue without a straightforward solution.giov


Previous Comments:
------------------------------------------------------------------------
[2010-08-31 06:06:45] michael at wakeless dot net

I'm pretty sure everyone should be aware of this but I'll say it
nonetheless.



parent:: isn't necessarily a static call. When it's used within an
object context it should remain within an object context, but the
subsequent call to __callStatic seems to lose it.



I tried a workaround of testing for $this in __callStatic but it seems
to have gone missing.



Is there anything I can do to help this out? Write a more comprehensive
test case that can be checked into the suite?

------------------------------------------------------------------------
[2010-08-31 01:06:05] fel...@php.net

The change was introduced as a fix for the bug #51176.

------------------------------------------------------------------------
[2010-08-31 01:05:07] fel...@php.net

The difference introduced was that the __call() just will be called when
__callStatic() is not implemented, on such static method calls.

------------------------------------------------------------------------
[2010-08-28 22:38:40] giovanni at giacobbi dot net

I ran into the same problem.



It's a serious breakage! I just tested on php 5.3.2 and it works as
expected!

------------------------------------------------------------------------
[2010-08-27 06:06:16] michael at wakeless dot net

Description:
------------
When using the __call and __callStatic functionality on a parent class
calls to parent::method() will always use __callStatic rather than the
__call. 



This breaks backwards compatibility in a number of cases.

Test script:
---------------
class A {

  function __call($method, $args) {

    if($method == "Test") {

      echo "Success.";

    }

  }

  

  function __callStatic($method, $args) {

    echo "Failure.";

  }

}



class B extends A {

  function Test() {

    echo "Test called.";

    parent::Test();

  }

}



$test = new B;

$test->Test();



Expected result:
----------------
//Expected output: Test called.Success.

Actual result:
--------------
//Actual output: Test called.Failure


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



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

Reply via email to