Re: An overloading question [message #174483 is a reply to message #174480] |
Tue, 14 June 2011 18:32 |
Denis McMahon
Messages: 634 Registered: September 2010
Karma:
|
Senior Member |
|
|
On Tue, 14 Jun 2011 12:49:11 -0400, sheldonlg wrote:
> I have a problem that I am wrestling with that should be so obvious and
> easy -- but it isn't. I have a base class that has a method that calls
> another method in the base class with $this->thatOtherMethod. I have
> another class that extends the base class and I want to have
> thatOtherMethod in the extended class override the one in the base
> class. The calling method in the base class is called using and
> instance of the extended class pointing to that method.
>
> Simply, here is an example:
>
> A.class.php
> --------------------------
> <?php
> abstract class A {
> public function b() {
> $this->a();
> }
> protected function a() {
> print 'In class A';
> }
> }
> ?>
>
> B.class.php
> ---------------------------
> <?php
> include_once 'A.class.php';
> class B extends A {
> public function a() {
> print 'In class B';
> }
> }
> ?>
>
> c.php
> ----------------------------
> <?php
> include 'B.class.php';
> $x = new B();
> $x->b();
> ?>
> ----------------------------
>
> I want it to print out "In class B", but it prints out "In class A".
>
> I have looked over Google quite a bit and found nothing that helped. I
> have tried making the methods public, protected, keep them both the same
> access, etc. and have had no luck. Suggestions?
I think A->a() is being used as a constructor for the base class when you
instantiate the extended class.
This might (or might not) be causing confusion as to what's happening.
This code:
<?php
abstract class A {
public function x() {
print "x() In class A\n";
$this->y();
}
public function y() {
print "y() In class A\n";
}
public function a() {
print "a() In class A\n";
}
}
class B extends A {
public function y() {
print "y() In class B\n";
}
}
print "instantiate\n";
$x = new B();
print "call function\n";
$x->x();
?>
gives:
instantiate
a() In class A
call function
x() In class A
y() In class B
Not sure, though, if that solves your problem or not?
Rgds
Denis McMahon
|
|
|