7.7. Accessing Overridden Methods
Problem
You want to access a method in the parent class that’s been overridden in the child.
Solution
Prefix
parent:: to the method
name:
class shape {
function draw( ) {
// write to screen
}
}
class circle extends shape {
function draw($origin, $radius) {
// validate data
if ($radius > 0) {
parent::draw( );
return true;
}
return false;
}
}Discussion
When you override a parent method by defining one in the child, the parent method isn’t called unless you explicitly reference it.
In the Solution, we override the draw( ) method in
the child class, circle, because you want to
accept circle specific parameters and validate the data. However, in
this case, we still want to perform the generic shape::draw( ) action, which does the actual drawing, so we call
parent::draw( ) inside your method if
$radius is greater than 0.
Only code inside the class can use parent::.
Calling parent::draw( ) from outside the class
gets you a parse error. For example, if circle::draw( ) checked only the radius, but you also wanted to call
shape::draw( ), this wouldn’t
work:[4]
$circle = new circle;
if ($circle->draw($origin, $radius)) {
$circle->parent::draw();
}If you want to call the constructor belonging to an
object’s parent but don’t know the
parent’s class name, use get_parent_class( )
to
dynamically identify the parent, then combine that
with
parent:: to call the parent’s
constructor:
class circle extends shape { function circle( ) { $parent = get_parent_class($this); ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access