From: "Joel Kitching" <[EMAIL PROTECTED]>
> 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.
>
> // main project class
> class gfusion {
> protected static $db;
> function __construct() {
> $this->db = new db;
> }
> }
>
>
> // database class
> class db {
> private $link;
> private $query;
> private $result;
> ...
> function query($query);
> function fetch_row();
> function fetch_rows();
> ...
> }
>
>
> // user class
> class user {
> private $id;
> private $group_id;
> private $login;
> private $password;
> /* Somehow I need to get the db class instance here. */
>
> function __construct($id = false) {
> if (is_numeric($id)) {
> print_r($this);
> $this->db->query('SELECT * FROM user WHERE id = ' . $id);
> $user_info = $this->db->get_row();
>
> $this->id = $user_info['id'];
> $this->group_id = $user_info['group_id'];
> $this->login = $user_info['login'];
> $this->password = $user_info['password'];
> }
> }
> ...
> }
>
>
> 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.
See here: http://www.php.net/manual/en/language.oop5.decon.php
and note this: Note: Parent constructors are not called implicitly. In order
to run a parent constructor, a call to parent::__construct() is required.
---John Holmes...
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php