ID: 34421 Comment by: thomas at gielfeldt dot dk Reported By: wkonkel at gmail dot com Status: Open Bug Type: Feature/Change Request Operating System: redhat PHP Version: 5.0.5 New Comment:
a grammatical correction: "hoping it would be" = "hoping it will be" :-) /Thomas Previous Comments: ------------------------------------------------------------------------ [2005-12-22 10:42:15] thomas at gielfeldt dot dk Hi I've mailed the patch to the internals mailing list, hoping it would be taken into consideration. two new functions have been added: get_scope() and is_static(). Example of solution to the above code after patching: <? class baseClass { static function do_get_scope() { return get_scope(); } static function do_backtrace() { $backtrace = debug_backtrace(); return $backtrace[0]['scope']; } } class extendedBaseClass extends baseClass { } echo extendedBaseClass::do_get_scope() . "<br>"; echo extendedBaseClass::do_backtrace() . "<br>"; ?> Expected result: ---------------- extendedBaseClass extendedBaseClass Actual result: -------------- extendedBaseClass extendedBaseClass ------------------------------------------------------------------------ [2005-09-09 13:25:34] [EMAIL PROTECTED] This is a limitation in the way the engine works and it most likely won't change in the near future. See also previous discussions about it. http://zend.com/zend/week/week219.php#Heading5 ------------------------------------------------------------------------ [2005-09-08 16:06:19] wkonkel at gmail dot com Although this is how it currently does work, this is not logical. If I specify that the scope to be "extendedBaseClass", then why is the scope "baseClass"? If this was not a static method, calling get_class() would return "extendedBaseClass" because the object simply isn't a "baseClass", it's an "extendedBaseClass". Static methods are no different. ------------------------------------------------------------------------ [2005-09-08 09:34:30] wkonkel at gmail dot com Description: ------------ When a static function is called in the scope of an extended class, the static function still thinks it's being called in the scope of the base class. I found a similar bug at http://bugs.php.net/bug.php?id=30828 which was fixed in 5.0.5, but the problem still remains. Reproduce code: --------------- <? class baseClass { static function do_get_class() { return get_class(); } static function do_backtrace() { $backtrace = debug_backtrace(); return $backtrace[0]['class']; } } class extendedBaseClass extends baseClass { } echo extendedBaseClass::do_get_class() . "<br>"; echo extendedBaseClass::do_backtrace() . "<br>"; ?> Expected result: ---------------- extendedBaseClass extendedBaseClass Actual result: -------------- baseClass baseClass ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34421&edit=1