ID: 37723
User updated by: matt at c dot anvas dot es
-Summary: Incorrect Inheretence Context
Reported By: matt at c dot anvas dot es
Status: Open
Bug Type: Class/Object related
Operating System: Any
PHP Version: 5.1.4
New Comment:
(Fixed name)
Previous Comments:
------------------------------------------------------------------------
[2006-06-07 07:34:51] matt at c dot anvas dot es
Description:
------------
Though I've verified that others have noted the same problem
with code similar to mine, I noticed what appeared to be a
greater problem than at first realized.
In the code below, a call to get_class() from a static
method inhereted from the parent class actually shows no
evidence of inheretence. One look at the stacktrace and
you'll not even see one mention of the child class.
Late static binding may fix this, as I'm not precisely sure
what that does and what the exact problem is, but the way I
see it, the child class is not inhereting everything from
its parent but has, instead, thrown the call to its parent,
thereby changing its context.
Again, consider the code: my context is that I'm talking
with a child object, whose parent has a static method that
gets its name. Unfortunately, when asking the child its
name, the parent's name is instead given. If indeed the
child has inhereted its parents properties and methods, then
this is a bug whereby it changes the context outside of
itself.
Compare this to human inheretence and the children inheret
all of the properties from their parents (though a bit
organically with crossing over and the like). But still, it
contains those things and does not go to the parent every
time a property or an action needs to be consulted or acted.
Again, a look at the backtrace reveals that it totally skips
the child class, as if it doesn't even exist.
Reproduce code:
---------------
class Parent {
public static function name() {
// debug_print_backtrace(); // observe this
return get_class();
}
}
class Child extends Parent {}
print Child::name();
Expected result:
----------------
Child
Actual result:
--------------
Parent
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37723&edit=1