Zacznę od tego że jestem tutaj całkiem nowy więc proszę o wyrozumiałość jeśli palnę coś nie zgodnego z zasadami panującymi na tym forum. Do tej pory zajmowałem się programowaniem w PHP4. Głównie były to informacje pochodzące bezpośrednio z MySQL-a. Teraz zmiana serwera skłoniła mnie do przesiadki na PHP5.
Pierwszy przykład i pojawiły się już pierwsze pytania.. Otóż przypuśćmy ze mamy taką klasę.
1.
CODE
class config {
public $settings=array();
function __construct () {
$this->settings = $this->get_settings()
}
function get_settings() {
return parse_ini_file("config.ini", TRUE);
}
}
public $settings=array();
function __construct () {
$this->settings = $this->get_settings()
}
function get_settings() {
return parse_ini_file("config.ini", TRUE);
}
}
Prosta klasa która będzie pobierała dane z pliku konfiguracyjnego i je zapamiętywała. Teraz załóżmy istnienie drugiej która będzie miała za zadanie połączyć się z bazą MySQL-a. Mam do wyboru dwa warianty z czego jeden i drugi funkcjonują identycznie.
2a.
CODE
class db {
public $connect=0;
function __construct() {
$ob = new config();
$this->connect = mysql_connect($ob->settings['host'],$ob->settings['user'],$ob->settings['passwd']);
mysql_select_db($ob->settings['db']);
}
}
public $connect=0;
function __construct() {
$ob = new config();
$this->connect = mysql_connect($ob->settings['host'],$ob->settings['user'],$ob->settings['passwd']);
mysql_select_db($ob->settings['db']);
}
}
2b.
CODE
class db extends config {
public $connect=0;
function __construct() {
$ob = config::get_settings();
$this->connect = mysql_connect($ob['host'],$ob['user'],$ob['passwd']);
mysql_select_db($ob['db']);
}
}
public $connect=0;
function __construct() {
$ob = config::get_settings();
$this->connect = mysql_connect($ob['host'],$ob['user'],$ob['passwd']);
mysql_select_db($ob['db']);
}
}
Pytanie teraz brzmii który jest poprawny merytorycznie - zgodnie z zasadami. CZy sensowne jest tworzenie w takiej sytuacji nowego obiektu czy poprostu wywołanie funckji z klasy bez tworzenia obiektu.?? Acha doam że założenia będą jeszcze kolejne. Tzn następne klasy będą korzystać z w/w. Np Klasa strona będzie korzystać i z db i z config. Klasa validator tylko z config. Klasa Login będzie i z db i config ... itd.
Doradźcie cosik...