You are here: Re: OOP database tables <-> php interface (semi LONG) « PHP Programming Language « IT news, forums, messages
Re: OOP database tables <-> php interface (semi LONG)

Posted by amygdala on 04/16/07 14:01

"Toby A Inkster" <usenet200703@tobyinkster.co.uk> schreef in bericht
news:dclbf4-4kp.ln1@ophelia.g5n.co.uk...
> amygdala wrote:
>
>> Since I would like to have only one database handler that can be accessed
>> by
>> both the constructor and the factory method (?) getUserById() I decided
>> to
>> declare $dbh static. Does this make sense?
>
> It makes sense, but a better solution would be to make your database
> object into a singleton class. That is, similar to the Database object
> here:
>
> http://message-id.net/<r1s3f4-4kp.ln1@ophelia.g5n.co.uk>
>

Well, that is the case already. Perhaps it was a bit confusion because I
named the method in the Database object getInstance. I've changed it to
getSingleton now. (See below).

But that still doesn't allow me to create the $dbh only once at the
beginning of the User class like so:

class User
{
private $dbh = Database::getSingleton( /* */ );

private function __construct() {}

public static function getUserById()
{
// use self::$dbh here
}

public function saveUser()
{
// use self::$dbh here
}
}

Mind you, it's not a big issue, merely a cosmetic one. What I am still
struggeling more with is the registrate function. Would you consider that a
User class method. Or should it be in some other object. Or perhaps just be
a regular function in the global script?


// class Database code:

class Database
{
protected static $dbh;

private function __construct() {}

public static function getSingleton( $interface, $host, $schema, $username,
$password )
{
if ( !isset( self::$dbh ) )
{
self::$dbh = new PDO( ( $interface . ':host=' . $host . ';dbname=' .
$schema ), $username, $password );
self::$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//self::$dbh->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE );
}
return self::$dbh;
}

public function __destruct()
{
if ( isset( self::$dbh ) )
{
self::$dbh = NULL;
}
}
}

 

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

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