FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » An overloading question
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: An overloading question [message #174492 is a reply to message #174483] Tue, 14 June 2011 22:27 Go to previous messageGo to previous message
sheldonlg is currently offline  sheldonlg
Messages: 166
Registered: September 2010
Karma:
Senior Member
On 6/14/2011 2:32 PM, Denis McMahon wrote:
> 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

I modified B to give it an explicit constructor. It still didn't work.
Why did your example print out that last line. It was never called.
Why did it use it as a constructor? That doesn't seem to make sense.

--
Shelly
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: check user log and redirect
Next Topic: use GET in include
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Thu Nov 28 10:31:03 GMT 2024

Total time taken to generate the page: 0.04565 seconds