Home arrow PHP arrow Page 3 - Object Interaction in PHP: Introduction to Aggregation, part 4

Assembling classes (continued): the “Pager” class at glance - PHP

In the fourth and final article in our series covering aggregation in PHP, Alejandro Gervasio reviews the MySQLConnector and Pager classes. He then uses these classes first to build a simple database, then to display some paged results from the database.

TABLE OF CONTENTS:
  1. Object Interaction in PHP: Introduction to Aggregation, part 4
  2. Assembling classes: a brief look at the “MySQLConnector” class
  3. Assembling classes (continued): the “Pager” class at glance
  4. Putting the classes to work: a practical example
By: Alejandro Gervasio
Rating: starstarstarstarstar / 23
June 15, 2005

print this article
SEARCH DEV SHED

TOOLS YOU CAN USE

advertisement

I’m not going to explain once again how this class works, because it was thoroughly covered in the previous articles in this series. Just let me to say that it aggregates the “MySQLConnector” object, accepting it as a parameter. It later uses the methods offered by this first object to execute SQL queries, display paged result sets and finally, generate the proper paging links.

As usual, here’s the source code:

class Pager {

            var $db; // MySQLConnector object

            var $query; // SQL query

            var $numRecs; // number of records per page

            var $output=''; // dynamic output

            function Pager(&$db,$query,$numRecs=5){

                        $this->db=&$db;

                        (preg_match("/^SELECT/",$query))?$this->query=$query:die('Invalid query '.$query);

                        (is_int($numRecs)&&$numRecs>0)?$this->numRecs=$numRecs:die('Invalid number of records');

            }

            function displayRecords($page){

                        // calculate total number of records using MySQLConnector object

                        if(!$totalRecs=$this->db->getNumRows($this->db->performQuery($this->query))){

                                   die('Cannot retrieve records from database');

                        }

                        // calculate number of pages

                        $numPages=ceil($totalRecs/$this->numRecs);

                        // validate page pointer $page

                        if(!preg_match("/^\d{1,2}$/",$page)||$page<1||$page>$numPages){

                                   $page=1;

                        }

                        // retrieve result set using MySQLConnector object

                        $this->db->performQuery($this->query.' LIMIT '.($page-1)*$this->numRecs.','.$this->numRecs);

                        while($rows=&$this->db->fetchRow()){

                                   foreach($rows as $row){

                                               $this->output.=$row.'&nbsp;';

                                   }

                                   $this->output.='<br />';

                        }

                        $this->output.='<div>';

                        // create previous link

                        if($page>1){

                                   $this->output.='<a href="'.$_SERVER['PHP_SELF'].'?page='.($page-1).'">&lt;&lt;Previous</a>&nbsp;';

                        }

                        // create numbered links

                        for($i=1;$i<=$numPages;$i++){

                                   ($i!=$page)?$this->output.='<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i.'</a>&nbsp;':$this->output.=$i.'&nbsp;';

                        }

                        // create next link

                        if($page<$numPages){

                                   $this->output.='&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?page='.($page+1).'">Next&gt;&gt;</a> ';

                        }

                        $this->output.='</div>';

                        // return generated output

                        return $this->output;

            }

}

The only thing to be pointed out here is how we use the methods of the “MySQLConnector” object to perform the tasks inherent to the “Pager” class. Generally speaking, as a rule of thumb, when one object aggregates another one, the first object is passed as a reference to the second, in order to address some performance issues.

Of course, the possible overhead caused to the server will depend strongly on how applications use the objects involved in the interaction process. For instance, if multiple objects are sharing the same object for connecting to a database, probably the server will suffer a heavy load when the application is used by numerous users. While this may sound like a common sense thing, it’s important to know where to implement aggregation in projects.

Having listed the source code for each developed class, it’s time to build an illustrative example for proper implementation. Just turn the page and keep reading.



 
 
>>> More PHP Articles          >>> More By Alejandro Gervasio
 

blog comments powered by Disqus
escort Bursa Bursa escort Antalya eskort
   

PHP ARTICLES

- Hackers Compromise PHP Sites to Launch Attac...
- Red Hat, Zend Form OpenShift PaaS Alliance
- PHP IDE News
- BCD, Zend Extend PHP Partnership
- PHP FAQ Highlight
- PHP Creator Didn't Set Out to Create a Langu...
- PHP Trends Revealed in Zend Study
- PHP: Best Methods for Running Scheduled Jobs
- PHP Array Functions: array_change_key_case
- PHP array_combine Function
- PHP array_chunk Function
- PHP Closures as View Helpers: Lazy-Loading F...
- Using PHP Closures as View Helpers
- PHP File and Operating System Program Execut...
- PHP: Effects of Wrapping Code in Class Const...

Developer Shed Affiliates

 


Dev Shed Tutorial Topics: