frage zu php 5

caramba12321

blödefragensteller
Hallo leute steige grade von php 4 auf php 5 auf.
meine einfache frage ist folgende. aus php 4 bin ich folgendes gewohnt.
$db = new db();
class Klasse1{
global $db
..........
}

ich will also innerhalb von Klasse 1 auf $db zugreifen.
muss ich das jetzt machen indem ich veerbe?
class Klasse1 extends db

oder wie führe ich das korrekt in php 5 aus?
 
wenn ich dich richtig verstehe sollte ich das dann so regeln?

function __construct($db){
$this->db = $db;
}

und wenn ich nun mehrere klassen nutzen will? also $misc, $db. usw....?

achja und anstatt von $this->db könnte man auch self::db schreiben?
 
wenn ich dich richtig verstehe sollte ich das dann so regeln?

function __construct($db){
$this->db = $db;
}

und wenn ich nun mehrere klassen nutzen will? also $misc, $db. usw....?
Ich find alles besser als global zu nutzen. Entsprechend wuerde ich halt den Weg gehen alles was noetig ist an den Konstruktor zu uebergeben.

Vorteil bei PHP5 ist auch dass hier automatisch mit Referenzen gearbeitet wird, nicht mit Kopien wie bei PHP4.

achja und anstatt von $this->db könnte man auch self::db schreiben?
Bin nicht ganz sicher, :: nutzt man meiner Meinung nach eher wenn man mit nicht-instanziierten Klassen arbeitet, oder bei Konstanten.
Allgemein wuerde ich eher $this->db nutzen, wie ich es auch in mindestens einer meiner Klassen mache.

Hier mal mein Konstruktor:
PHP:
	public function __construct(&$db,$table='sqlsessions')
	{
		$this->db=&$db;
		$this->table=$this->db->escape_string($table);
		session_set_save_handler(array($this,'opensession'),array($this,'closesession'),array($this,'readsession'),array($this,'writesession'),array($this,'destroysession'),array($this,'garbagecollection'));
	}

Und einer der Funktionen die mit der Instanz des DB-Objektes arbeitet.
PHP:
	public function writesession($sessionid,$sessiondata)
	{
		$resultset=$this->db->getresultset();
		$this->db->query("replace into `".$this->table."` (`id`,`data`,`useragent`,`ip`) values ('".$this->db->escape_string($sessionid)."','".$this->db->escape_string($sessiondata)."','".$this->db->escape_string($_SERVER['HTTP_USER_AGENT'])."','".$this->db->escape_string($_SERVER['REMOTE_ADDR'])."')");
		$this->db->setresultset($resultset);
		return true;
	}
 
ok danke dafür.
ich hab jetzt eine variable $vars ersellt die ich mit __set() und __get() bearbeite. Ich werde dort einfach immer meine variablen ablegen und dann in den geweiligen klassen einen konstruktor starten der nur diese $variable $vars erstellt. so kann ich dann über $vars->db->query(); meine objekte abrufen :)
 
Zurück