[PHP4] kompozice, dedicnost
Resim docela zajimavy problem.
Mam dve tridy, html a sql.
html me slouzi pro vypis hlavicky, paticky, menu, nastaveni cest apod.
sql pro komunikaci s databazi, checkovani query apod.
Doted jsem je pouzival ve skriptech tak, ze jsem si nejdrive vytvoril instanci html a pak instanci sql.
V sql mam metodu, ktera zachytava chyby databaze, vypise z html hlavicku, chybu a paticku, aby to pekne vypadalo a sedelo do designu stranku a uzivateli nevypadla cela stranka pri chybe DB.
To jsem pouzival nasledovne.
Kód:
function error($error_msg) { //vypise chybu pri vykonavani sql prikazu
global $html;
$html->headers(); //je nutno vypnout ob_start v html.inc.php, jinak to nebude fungovat!!
$html->html1(); //Aby chyba sedla do designu stranky je vypsan uvod stranky
echo "<div>". $error_msg ."</div>"; //Vypise typ chyby
$html->html2(); //Vypsani zaveru stranky
exit;
}
Problem ale nastal, kdyz chci pouzit tridu sql uvnitr tridy html.
Potrebuju jeste v hlavicce hrabnout do DB, takze si tam vytvorim instanci tridy sql, ale problem je, ze metoda error v sql pocita s uz vytvorenou instanci tridy html.
Zkousel jsem kompozici, ze do konstruktoru sql jsem pridal parametr na tridu html a ten pak pouziju v sql.
V tride html vytvorim instanci sql
Kód:
....
$sql = new sql($this);
...
Kód:
function sql(&$html_class) { //konstruktor
$this->html = &$html_class;
include $this->html->physical_path ."includes/config.inc.php"; //pripojim konfigurak
......
a tady me to jeste fachci. Ale jakmile chci pouzit $this->html v jine metode tridy sql, tak me to uz nejede. Zkousel jsem to i pres dedicnost, ale s tou jsem se take nedobral vysledku.
Napada vas, jak to muzu vyresit, podotykam opet, ze podminkou je PHP4, ne PHP5