|
Posted by Jeff North on 07/12/06 15:21
On Wed, 12 Jul 2006 10:30:05 -0400, in comp.lang.php Jerry Stuckle
<jstucklex@attglobal.net>
<M6qdnd-IMIXBmijZnZ2dnUVZ_vadnZ2d@comcast.com> wrote:
>| 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:
>| > -------------------------------------------------------------------------
[snip example code]
>| > -------------------------------------------------------------------------
>| > 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.
>|
>| Jeff,
>|
>| The quick answer is
It was quick - I only posted this about 20min ago :-)
>| - 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.
That makes sense :-)
I've never seen any example daisy-chain classes before.
>| 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.
Just as I thought. I need to go into each of these script files and
alter the function names so that they are not overriding each other.
>| 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.
Many thanks for your help.
---------------------------------------------------------------
jnorthau@yourpantsyahoo.com.au : Remove your pants to reply
---------------------------------------------------------------
Navigation:
[Reply to this message]
|