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

Reply via email to