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

 ID:               51504
 Comment by:       phoenix at twistersfury dot com
 Reported by:      phoenix at twistersfury dot com
 Summary:          Incorrect Inheritence Order Within The Context Of The
                   Class
 Status:           Bogus
 Type:             Bug
 Package:          Class/Object related
 Operating System: Windows XP Pro w/IIS
 PHP Version:      5.3.2

 New Comment:

Ahh. Thanks for the info.


Previous Comments:
------------------------------------------------------------------------
[2010-04-08 05:58:12] ras...@php.net

The foo() constructor is only called for class foo if you don't have a 

__construct() method defined in it, so the other way to fix your problem
is to 

simply add a constructor.

------------------------------------------------------------------------
[2010-04-08 05:45:46] phoenix at twistersfury dot com

Ahh...I forgot about that. I got into PHP after the __construct
function. This can be shutdown then.

------------------------------------------------------------------------
[2010-04-08 05:30:47] ras...@php.net

There is no bug here.  You are getting confused by the fact that a
method with 

the same name as the class is taken to be the constructor for that
class.  Rename 

your class to xxx and you will get your expected output.

------------------------------------------------------------------------
[2010-04-08 04:34:01] phoenix at twistersfury dot com

Description:
------------
If you have a child class that overrides a parent class method, and call
that method within the context of the parent, the parent's method is
called first, then the child class. This always happens. If you call the
method outside of the class, then the child's method is called, and the
parent's method is only ran if you tell it to using parent::



If you add a third level of inheritance, under the same conditions, the
parent class will still call first, but the lowest child is called,
skipping those in between.



Adding:

...

        class bar2 extends bar {

                public function foo() {

                        echo 'in_child_2:';

                }

        }



        $objClass = new bar();

...



Results in in_parent:in_child_2:

Test script:
---------------
<?php

        class foo {

                public function foo() {

                        echo 'in_parent:';

                }



                public function bar() {

                        $this->foo();

                }

        }



        class bar extends foo {

                public function foo() {

                        echo 'in_child:';

                }

        }



        $objClass = new bar();

        $objClass->bar();

        $objClass->foo();

?>

Expected result:
----------------
in_child:in_child:

Actual result:
--------------
in_parent:in_child:in_child:


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



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

Reply via email to