Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: classy dziedziczenie
Forum PHP.pl > Forum > PHP
tamin
Juz przejrzalem cale forum. Znalazlem kilka metod m.in. przez $_GLOBALS.
A ja mam taki problem:
mam klase glowna:
core
i inne klasy np.
db
error
load

I teraz klasa core includuje plik np. db.php, error.php itp.
a pozniej robi $this -> smarty = new Smarty; albo
$this -> Db = new db();

i w pliku index.php daje $cms = new core; i wszystko byloby ok dopoki classy sa bardzo proste.
A teraz pytanie: mam classe error w pliku error.php i includuje ja w klasie core. Klasa error musi korzystac z klasy db. Tak samo klasa load musi korzystac z error, load, db i smarty. Jak to zrobic najprosciej, najszybciej i najbezpieczniej.

Z gory wielkie dzieki za wszelkie podpowiedzi.
rzseattle
W ten sposob jak na twoje potrzeby powinno byc dobrze:

[php:1:de85a39b98]<?php
$this -> Db = new db();

$this -> Error = new error;
$this -> Error -> db = &$this -> Db;
?>[/php:1:de85a39b98]

Tylko ze Db nie bedzie jeszcze widoczne w konstruktorze klasy error wiec musisz recznie odpalac konstruktor klasy przez np $this -> Error -> _error();
chfast
Istnieją jeszcze dwa sposoby. Najpierw według mnie lepszy:[php:1:7e360d433e]<?php
class Core
{
//konstruktor:
function Core()
{
$this->Error = new Error();
$this->Db = new Db( &$this->Error );
}
}

class Db
{
//konstruktor:
function Db( &$Error )
{
$this->Error = &$Error;
}
}
?>[/php:1:7e360d433e]
W ten sposób masz w obiekcje $Db referencje do zewnętrznego obiektu $Error i możesz spokojnie korzystać z wszystkich jego funkcje: $Db->Error->func1() .

2 sposób - poprzez rozszerzenie klasy $Error:[php:1:7e360d433e]<?php
class Db extends Error
{
}
?>[/php:1:7e360d433e]
Funkcje klasy Error są dziedziczone przez klase Db. Wadą jest to, że w klasie Db zarówno funkcje Error jak i samego Db są na jednym poziomie. Można stracić orentacje która funkcja pochodzi od którego obiektu. Albo przez nieuwagę można nadpisać dziedziczone funkcje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.