You are here: Re: [PHP] Extending a Class « PHP « IT news, forums, messages
Re: [PHP] Extending a Class

Posted by Brent Baisley on 01/21/05 18:55

You're absolutely correct. I was debating on whether to get into
inheritance and overloading. I just settled on what PEAR tends to use
rather than go into more detail.

Thanks for clarifying.


On Jan 21, 2005, at 11:18 AM, Matthew Weier O'Phinney wrote:

> * Brent Baisley <brent@landover.com> :
>> You've got most of it. Just adding "extends MySQL" to your page result
>> class will allow you to access all function in the MySQL class. I
>> usually reference functions in the parent class like this:
>> parent::FunctionName()
>
> This is a bad practice when inheriting, usually -- the whole point is
> that the parent classes methods are directly available to the child
> class without using such constructs.
>
> $this-> FunctionName()
>
> will execute the method 'FunctionName' from the current class -- or any
> parent class if it is not defined in the current class. There's one
> good
> exception:
>
>> You still reference functions in the current class using $this-> ,
>> that
>> way you can have functions of the same name in both classes.
>
> To make a method in the child class of the same name as a method in the
> parent class is called overriding -- and is usually done to either
> change the behaviour of that method (for example, if you want to do
> something completely different than what was done in the parent class)
> or to supplement the behaviour of the parent method -- for instance, if
> the child class wishes to do some processing before or after the parent
> method is executed. In this latter case, you *will* use the
> parent::FunctionName() construct -- so that you can actually access the
> method you're currently overriding:
>
> class parentClass
> {
> // ...
>
> function someMethod()
> {
> // do something
> }
> }
>
> class someClass extends parentClass
> {
> // ...
>
> function someMethod()
> {
> // do some processing first
> parent::someMethod();
> // do some postprocessing
> }
> }
>
> So, in the OP's case, he might want to have override the fetchAssoc()
> method in his PageResultSet subclass so that it tacks on the LIMIT info
> to the SQL statement, and then have it call the parent (Mysql class)
> fetchAssoc() method with that modified SQL.
>
>> On Jan 20, 2005, at 9:17 PM, Phillip S. Baker wrote:
>>
>>> Greetings all,
>>>
>>> I have a class I use for MySQL connection and functions.
>>>
>>> I also have a class that I use to create Paged Results.
>>>
>>> The paged results class connects to a DB and uses allot of sql calls
>>> to make this happen. I am noticing that it does allot that the MySQL
>>> class does.
>>>
>>> What I would like to do is to Have the paged results extend the
>>> MySQL class so it can use the functions within that class so I can
>>> keep them updated in just one place. How would I go about doing
>>> that?? Is it as simple as something like this (this is shortened for
>>> convience)??
>>>
>>> class Mysql {
>>> var $results;
>>> var $dbcnx;
>>>
>>> function Mysql($query, $cnx) { // Constructor function
>>> $this-> dbcnx = $cnx;
>>> if (!$this-> results = @mysql_query($query))
>>> $this-> _error("There was an error with executing your query. Try
>>> again
>>> later.", $query);
>>> }
>>> }
>>>
>>> class PageResultSet extends MySQL {
>>> var $results;
>>>
>>> function PageResultSet ($query,$pageSize,$resultpage,$cnx) {
>>>
>>> $this-> results = @mysql_query($query,$cnx) or $this->
>>> _error('Error
>>> Running
>>> your search. Try back later.', $query);
>>> $this-> pageSize = $pageSize;
>>> if ((int)$resultpage <= 0) $resultpage = 1;
>>> if ($resultpage > $this-> getNumPages())
>>> $resultpage = $this-> getNumPages();
>>> $this-> setPageNum($resultpage);
>>> }
>>> }
>>>
>>> I would like to be able to pass the results from the MySQL class to
>>> the
>>> PageResultSet class without have to do the query over and such.
>>> How would I go about coding that? I am not clear on that.
>>>
>>> Also can I extend a function in PageResultSet that is started in
>>> MySQL??
>>> In MySQL I have
>>> function fetchAssoc() {
>>> if (!$this-> results) return FALSE;
>>> $this-> row++;
>>> return mysql_fetch_assoc($this-> results);
>>> }
>>>
>>> In PageResultSet I have
>>> function fetchAssoc() {
>>> if (!$this-> results) return FALSE;
>>> if ($this-> row > = $this-> pageSize) return FALSE;
>>> $this-> row++;
>>> return mysql_fetch_assoc($this-> results);
>>> }
>>>
>>> Can I just write something like within PageResultSet
>>> function fetchAssocPRS extends fetchAssoc () {
>>> if ($this-> row > = $this-> pageSize) return FALSE;
>>> }
>>>
>>> Thanks for the help.
>>>
>>> --
>>> Blessed Be
>>>
>>> Phillip
>>>
>>> --
>>> PHP General Mailing List (http://www.php.net/)
>>> To unsubscribe, visit: http://www.php.net/unsub.php
>>>
>>>
>
>
> --
> Matthew Weier O'Phinney | mailto:matthew@garden.org
> Webmaster and IT Specialist | http://www.garden.org
> National Gardening Association | http://www.kidsgardening.com
> 802-863-5251 x156 | http://nationalgardenmonth.org
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
Brent Baisley
Systems Architect
Landover Associates, Inc.
Search & Advisory Services for Advanced Technology Environments
p: 212.759.6400/800.759.0577

 

Navigation:

[Reply to this 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

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