Torsten Roehr wrote:

"Justin Patrin" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]

Bernie wrote:


Howdy,
   I am writing a program that has a handful of classes.  I would like
to be able to get information from one object to the other.  I have a
couple of my classes extending others, but are there other ways to do

this?

For example:  If I have a database class and a separate class that would
like to execute an sql statement...

class mydbclass {
   var $db;
   function mydbclass ($server,$username,$password,$database){
       $this->db=mysql_connect($server, $username, $password);
       mysql_select_db("$database",$db);
   }

   function dosql($sql){
       $result = mysql_query($SQL,$db);
   }

}

class myotherclass {
   function myotherclass(){
       $sql="select * from mytable";

       #now, how can I use $mydbclass->dosql($sql) to
       #execute this statement?

       #I want to be able to build a bunch of html with
       #the resulting records and it wouldn't make
       #sence to build all that in my db class

   }
}


Thanks!

I would suggest something like this:

class myotherclass {
    var $db

    function myotherclass(&$db){
        $this->db =& $db;

        $sql="select * from mytable";

        $this->db->dosql($sql);
    }
}

$db = new mydbclass();
$other = new myotherclass($db);

I would also suggest capitalizing the class names and using another DB
abstraction layer (such as PEAR DB or MDB) but that's your option. ;-)


Good point Justin. You do not necessarily need a $db var in your data
class - just use the passed $db object in your method:

class myotherclass {
     var $db;

     function myotherclass(&$db) {

         $sql = 'select * from mytable';
         $db->dosql($sql);
     }
}

Another way is to declare the $db variable global in your methods so that it
is available without the need to pass it to *every* single method:

Global vars are generally a bad idea... It leads to spaghetti code and can end up giving you huge headaches if you're not very careful.


Also, I am not saying that $db should be passed into every method. It should be passed into the constructor and assigned as a class variable (as my code above shows). Then, any method in the object can get to it.


class myotherclass {

     function myotherclass() {

         global $db;

         $sql="select * from mytable";
         $db->dosql($sql);
     }
}

But this is a case of personal preference.

Best regards, Torsten Roehr


--
paperCrane <Justin Patrin>

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



Reply via email to