Verständnisfrage zur OOP

visiondpc

Erfahrenes Mitglied
Hallo,
ich wälze jetzt schon seit einiger Zeit etliche Tutorials und Bücher um endlich mal den Durchblick in der Objektorientierung zu bekommen. Aber irgendwie kapiere ich das an der einen oder anderen Stelle noch nicht ganz und finde keine Saubere Lösung zu Klassenübergreifenden Objekten.


Ich erzeuge z.B. innerhalb einer Klasse z.B. ein neues Objekt $database, welches meine Datenbankverbindung erstellt und alle Methoden enthält um mit der Datenbank zu interagieren.
Jetzt benötige ich den Datenbank-Zugriff natürlich nicht nur in dieser einen Klasse sondern in mehreren. Wie genau kriege ich das Objekt jetzt in alle Klassen die es benötigen? Bzw. ich weiß wie ich es reinkriege aber was ist die sauberste Lösung?

Ich kann $database jedesmal an den Konstruktor übergeben oder einfach
PHP:
global $database;
$this->database = $database
verwenden. Aber da es natürlich mehere Objekte gibt die ich regelmäßig verwende müßte ich immer 5-10 Parameter an den Konstruktor übergeben bzw. globalisieren.
Vererbung hilft mir wohl auch nicht weiter, ich dann für jedes neue Objekt eine neue Datenbanverbindung herstellen würde.

Hat jemand einen Tipp für mich wie man sowas normalerweise regelt?

Ich hänge mal den den aufs wesentliche gekürzten Code an.

PHP:
<?php

define('CONFIGDIR', './config/');

class webPage
{
	function __construct()
	{
		$userdata = user::get();
		$database = new database;
		$template = new template;
		$language = new language($userdata['langID']);
		$language->load(array('global'));
		$content = content::get();
		$menu = menu::get();
		
		eval('$template->show("'.str_replace('"', '\\"', $template->get('index') ).'");');
	}
}

class database
{
	function __construct()
	{
		require_once(CONFIGDIR.'config.inc.php');
		$this->connect();
	}
	
	function connect()
	{
		...............
	}
	
	function query($query, $offset, $length)
	{
		...............
	}
}

class content
{
	function get()
	{
		global $database;
		global $template;
		$result = $database->query("........");
		while($row = $database->fetchAssoc($result))
		{
			eval('$content .= "'.str_replace('"', '\\"', $template->get("content") ).'";');
		}
		return $content;
		
	}
}

if($_GET['id'])
{
	$webpage = new webPage;
}


?>
 
Zurück