Bug #52741 [Opn->Fbk]: OOP late static bindings bug

From: Date: Mon, 13 Sep 2010 19:42:18 +0000
Subject: Bug #52741 [Opn->Fbk]: OOP late static bindings bug
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-154303@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=52741&edit=1 ID: 52741 Updated by: colder@php.net Reported by: flyguy dot by at gmail dot com Summary: OOP late static bindings bug -Status: Open +Status: Feedback Type: Bug Package: Scripting Engine problem Operating System: * PHP Version: 5.3.3 Assigned To: colder Block user comment: N New Comment: parent:: forwards LSB information In the initial case, it makes it perfectly normal for get_called_class to return test2, this is by design, if you don't want to pass the LSB info, reference your class by name, without keyword (i.e. test1::testing_method()). --- Johannes: on test3::testingmethod(): - parent::testing_method() will call parent (here test2), passing LSB info (test3) - test2::testing_method falls back to test1::method, passing LSB info test1::testing_method's get_called_class will be test3. To me it sounds perfectly normal? --- For the last comment: static::$field is resolved to once my_child::$field and once my_parent::$field, my_child::$field falls back to my_parent::$field, and updates it. => normal again Am I missing something here? Previous Comments: ------------------------------------------------------------------------ [2010-09-13 00:13:13] flyguy dot by at gmail dot com Ok. This situation is analogous to the one hand, but why then: class my_parent { public static $field; public static function field_setup() { static::$field='asd'; } } class my_child extends my_parent { } my_child::field_setup(); var_dump(my_child::$field); var_dump(my_parent::$field); ---------- prints: string 'asd' (length=3) string 'asd' (length=3) ------------------------------------------------------------------------ [2010-08-30 18:35:08] johannes@php.net Etienne, you are the LSB expert - what's your take on this? - In the given example I can see the reporter's point. (While there is a "extends test1" missing) I wonder about this: class test1 { public static function testing_method() { var_dump(get_called_class()); } } class test2 extends test1 { } class test3 extends test2 { public static function testing_method() { parent::testing_method(); } } Here parent might refer to test2, test2 inherits testing_method() from test1 so the called class might be test2 ... some might argue that test1 is correct. I think the most simple thing is to keep the current behavior and define parent not to change the lsb scope. ------------------------------------------------------------------------ [2010-08-30 17:33:48] flyguy dot by at gmail dot com Description: ------------ This is code prints "test2". Why ? Test script: --------------- class test1 { public static function testing_method() { var_dump(get_called_class()); } } class test2 { public static function testing_method() { parent::testing_method(); } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52741&edit=1

« previous php.bugs (#154303) next »