ID:               48714
 Comment by:       sjoerd-php at linuxonly dot nl
 Reported By:      sebcorne at gmail dot com
 Status:           Open
 Bug Type:         Scripting Engine problem
 Operating System: Windows
 PHP Version:      5.3.0RC4
 New Comment:

Thank you for your bug report.

Are you sure the behavior you describes is not documented? Please take
a look at:
http://nl.php.net/manual/en/language.oop5.late-static-bindings.php#language.oop5.late-static-bindings.edge-cases


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

[2009-06-30 05:45:29] sebcorne at gmail dot com

class base
{
        static public function __callstatic($name, $arguments)
        {
                echo get_called_class() . "::$name() is called \n\n";
        }
        public function __call($name, $arguments)
        {
                echo get_called_class() . "->$name() is called \n\n";
        }
}



give the same result.
but without "__call()", it's ok.

if "$this" exists in inheritance, "__call()" (of $this) is called
instead of "__callstatic()"

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

[2009-06-29 09:17:57] sebcorne at gmail dot com

Description:
------------
Tested on php5.3.0-alpha3 (must be tested on last snap)

When calling parent class method, self is responding

(sorry for my bad english)

Reproduce code:
---------------
class base
{
        public function __call($name, $arguments)
        {
                echo get_called_class() . "->$name() is called \n\n";
        }
}


class A extends base
{
        public function parent_automatic()
        {
                $parentclass = get_parent_class($this);
                echo get_class($this) . '->'. __FUNCTION__ ."() call
$parentclass::test() \n";
                $parentclass::test();
        }
        
        public function parent_manual()
        {
                echo get_class($this) . '->'. __FUNCTION__ ."() call A::test() 
\n";
                A::test();
        }
}


class B extends A {}



$b = new B;
$b->parent_automatic();
$b->parent_manual();


Expected result:
----------------
B->parent_automatic() call A::test() 
A->test() is called 

B->parent_manual() call A::test() 
A->test() is called 


Actual result:
--------------
B->parent_automatic() call A::test() 
B->test() is called 

B->parent_manual() call A::test() 
B->test() is called 



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


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

Reply via email to