Re: Create collections of objects

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Emilio Astarita wrote:
> Hi people,
> 
> I want a class that allows create objects that get the information
> consulting the DB. So, I am thinking to do something like this:
> 
> class element {
>   public __construct($id,$type = 'id') {
>     switch($type) {
>     case 'id':
>       $where = sprintf(" id = %d ",$id);
>       break;
>     case 'name':
>       $where = sprintf(" name = %s ",escape($id));
>       break;
>       //...
>       // get the row and call setName($row['name'])...
>     }
>   }
> }
> 
> This works fine, but also I want a good way (efficient) of getting a
> collection of these objects. I can't figure a convenient way. A static
> function its a good posibility? I have some ideas but they imply public
> setters of the class `element'.
> 
> Thanks for any help.
> 

A static method should still be able to set values of private members. I do
something like:

class Element
{
  private $id;
  private $name;

  public __construct()
  {
    // Do general construction tasks...
  }

  public static bulkLoad($id,$type='id')
  {
    $ret = Array();
    $sql = 'SELECT id,name FROM Table ';
    switch ($type)
    {
      case 'id':
	$sql .= 'WHERE id ILIKE $1'; // Use ILIKE to allow for wildcards
        break;
      case 'name':
        $sql .= 'WHERE ILIKE $1'; // Use ILIKE to allow for wildcards
        break;
      //...
    }
    $params = Array($id);
    // I use postgreSQL parameterised queries a lot - saves lots of quoting etc.
    // Note: NO ERROR CHECKING in this example...
    $data = pg_fetch_all(pg_query_params($sql,$params));
    foreach ($data as $row)
    {
      $elem = new Element(); // No-args constructor
      $elem->id = $row['id'];
      $elem->name = $row['name'];
      $ret[$id] = $elem;
    }
    return $ret;
  }
}

Then you get an array of elements which match the (possibly wild-carded)
condition, indexed by the element Id (useful for making HTML <select> lists, for
example).

In fact, I have a base class which implements this by class introspection -
filling the properties of objects which extend it by mapping them to the
database fields...



-- 
Peter Ford                              phone: 01580 893333
Developer                               fax:   01580 893399
Justcroft International Ltd., Staplehurst, Kent

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux