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 #174497 is a reply to message #174496] Wed, 15 June 2011 00:45 Go to previous messageGo to previous message
Jerry Stuckle is currently offline  Jerry Stuckle
Messages: 2598
Registered: September 2010
Karma:
Senior Member
On 6/14/2011 7:43 PM, sheldonlg wrote:
> On 6/14/2011 7:12 PM, Jerry Stuckle wrote:
>> On 6/14/2011 6:27 PM, sheldonlg wrote:
>>> 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?
>>>>
>
>> Unfortunately, PHP doesn't really implement OO constructs very well - in
>> fact they to a pretty piss poor job of it. One of the problems is with
>> virtual functions, as you found. A good OO language would work like you
>> want, but PHP doesn't - the constructor for A will, in this case, only
>> call a function in A. In C++, Smalltalk, Java and most other OO
>> languages, you could define y() as virtual and the constructor for A
>> would call the function y() in B.
>
> I could define the method in A as abstract (and the class). It would
> then require that it be implemented in B. However, I am not the only
> application using A, and so doing that would require all the other apps
> to also implement it in an extended class. That is a no-no and is one of
> the reasons for using B in the first place.
>
>>
>> But if you created a constructor in B properly, it should call B:y().
>
> I did create a constructor in B properly.
>
>> I'd suggest checking your code again - you might have made a mistake.
>>
>
> No mistakes that I could find.
>

Id you created it properly, then the constructor in B should be calling
b::y().

I still suggest you have a mistake in your code.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
[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: Fri Sep 20 19:37:57 GMT 2024

Total time taken to generate the page: 0.03058 seconds