Reply to Re: PHP5 and Classes

Your name:

Reply:


Posted by Jerry Stuckle on 07/12/06 14:30

Jeff North wrote:
> My OOP knowledge is flaky, at best, so please be patient with me :-)
>
> I've downloaded the FPDF class from www.fpdf.org as well as some of
> the scripts that are available.
>
> Each of these scripts use:
> class mine extends FPDF {}
> which is what you'd expect when extending out to a new class.
>
> What I want/would like to do is to include multiple scripts which
> extend the base class of FPDF. I've managed to daisy-chain these
> classes similar to:
> -------------------------------------------------------------------------
> <?php
> class FPDF {
> function FPDF(){ echo "class FPDF<BR>";}
> function setSize(){ echo "setSize_FPDF()<BR>";}
> }
> class B extends FPDF {
> function B(){ echo "class B<BR>";}
> function setSize(){ echo "setSize_B()<BR>......";parent::setSize();}
> }
> class C extends B {
> function C(){ echo "class C<BR>";}
> function setLimit(){ echo "setLimit_C()<BR>";}
> }
> class D extends C {
> function D(){ echo "class D<BR>";}
> function PrintLine(){ echo "PrintLine_D()<BR>";}
> }
> class me extends D {
> function me(){ echo "class me<BR>";}
> function setSize()
> {
> echo "setSize_E()<BR>&nbsp;&nbsp;&nbsp;";
> //--- this only gets the class B function
> parent::setSize();
> }
> }
> //--- test code
> $x = new me();
> $x->FPDF();
> $x->PrintLine();
> $x->setSize();
>
> /* --- output
> class me
> class FPDF
> PrintLine_D()
> setSize_E()
> setSize_B()
> setSize_FPDF()
> */
> ?>
> -------------------------------------------------------------------------
> Now even *I* know that OOP was never intended to be like this. Is
> there a better/correct way?
>
> In my code how would I reference the FPDF setSize() method?
> FYI: the setSize is not overriding the base class, it is an internal
> function to that class only.
> ---------------------------------------------------------------
> jnorthau@yourpantsyahoo.com.au : Remove your pants to reply
> ---------------------------------------------------------------

Jeff,

The quick answer is - you don't, at least directly.

In OO, inheritance is "hidden" - the fact you are using it is not known
to the code accessing the class, nor should it care. The interface to
your "me" class is the public functions in "me", plus all the public
functions in it's base class "D" (which, in turn, has an interface which
includes the public functions in "C", etc.). But your code really
doesn't know about "D", "C", etc. - OO has abstracted that for you.

You're overriding of setSize is correct. "me" should do its work, then
call its base class's setSize (or call then do its work), etc. That way
each class operates on its own data, and calls its base class to work on
further data. This allows you to change your class hierarchy with
(almost) complete freedom without having to change the program. For
instance, you could compress everything into a single class "me" - and
your program would still work.

Now - you want to just call setSize in class FPDF. OO doesn't allow
this because abstraction says class "FPDF" doesn't actually exist (the
*function* FPDF may just be a function in class "me" for all it cares).

So you can't do it directly. However, you *could* create a function in
FPDF with another name (i.e. setSizeFPDF) to do the same work. This
will add the new function to your public interface and you can call it
by itself.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация