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

Reply via email to