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
   

PHP ARTICLES

- 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...
- PHP: Building Concrete Validators
- Sanitizing Input with PHP
- Executing Shell Commands with PHP
- Handling File Data with PHP
- File Security and Resources with PHP
- ArrayObject PHP Class Examples
- ArrayObject PHP Class: An Introduction
- Getting File System Data with PHP
- PHP Tools for Working with the File and Oper...
- Working with the File and Operating System w...
- PHP Proxy Patterns: Completing a Blog


© 2003-2012 by Developer Shed. All rights reserved. DS Cluster 9 - Follow our Sitemap

Dev Shed Tutorial Topics: