> Hello, I'm trying to get the hang of OOP here but can't quite figure > out how to relate these classes. I've got one for the main project, > one for the database, and one for a user. Somehow I need to get the > user access to the database, without cumbersome constructor calls > involving a copy of the instance of the class itself.
<snip class> > > I tried extending the user class from the project class, but that > didn't work, because the $db var was empty. I tried changing it to > static, but it didn't inherit the $db variable for some reason. So, > how can I make this work, so I can write a bunch of classes that can > blindly use $this->db or something similar without having to worry > about setting it in the constructor? I thought about setting it as a > global, but that didn't seem very... OOP. > > -- > Joel Kitching > http://midgardmanga.keenspace.com/ > This is a great class to learn how OO works in PHP5. class DB_Mysql { protected $user; // Database username protected $pass; // Database password protected $dbhost; // Database host protected $dbname; // Database name protected $dbh; // Database handle public function __construct($user, $pass, $dbhost, $dbname) { $this->user = $user; $this->pass = $pass; $this->dbhost = $dbhost; $this->dbname = $dbname; } protected function connect() { $this->dbh = @mysql_connect($this->dbhost, $this->user, this->pass); if (!is_resource($this->dbh)) { throw new Exception("Cannot connect to the database"); } if (!mysql_select_db($this->dbname, $this->dbh)) { throw new Exception("No such database by that name"); } } public function execute($query) { if (!$this->dbh) { $this->connect(); } $ret = mysql_query($query, $this->dbh); if (!$ret) { throw new Exception("There is an issue with the query string"); } elseif (!is_resource($ret)) { return TRUE; } else { $stmt = new DB_MysqlStatement($this->dbh, $query); $stmt->result = $ret; return $stmt; } } } class DB_MysqlStatement { public $result; public $query; protected $dbh; public function __contruct($dbh, $query) { $this->query = $query; $this->dbh = $dbh; if (!is_resource($dbh)) { throw new Exception("Cannot connect to the database"); } } public function fetch_row() { if (!$this->result) { throw new Exception("There is an issue with the query string"); } return mysql_fetch_row($this->query); } public function fetch_assoc() { return mysql_fetch_assoc($this->result); } public function fetchall_assoc() { $retval = array(); while ($row = $this->fetch_assoc()) { $retval[] = $row; } return $retval; } } Then call it like: $dbhObj = new DB_Mysql("user","passwd","localhost","DBname"); $query = "SELECT * FROM user WHERE id = ' . $id"; $result = $dbhObj->execute($query); while ($row = $result->fetch_assoc()) { //do stuff with $row array } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php