Newsgroup: it.comp.www.php
Titolo: php5 e oggetti - struttura applicazione web

Ciao a tutti
Ho un po di esperienza con php4 ma vorrei capire come strutturare un
applicazione in php5 da zero, e con un po di ordine se possibile.
quello che non mi è chiaro è principalmente come chiamare metodi e
variabili tra diverse classi. Vi propongo un esempio semplicissimo per
spiegarmi meglio, in pratica vorrei fare una semplice classe per
connettermi a un DB mettendo le variabili per la connessione in una
classe esterna:
classe con le variabili per il db (e altro):
//------------------------------------------->
Class Config {
	public $DBHOST = 'localhost';
	public $DBUSER = 'miouser';
	public $DBPASS = 'miapass';
	public $DBNAME = 'miodb';
 
	function __construct() {
	}
}
classe che fa la connessione:
//------------------------------------------->
class DB {
	public $dbh;
	function __construct($config) {
		$this->DB = $this->connect();
	}
	function connect() {
		$dblink = mysql_connect($config->DBHOST, $config->DBUSER,
$config->DBPASS) or die("Connesione al DB non riuscita");
		mysql_select_db($config->DBNAME) or die("Selezione del database non
riuscita");
		return $dblink; 
	}
}
--------------------------------------------------------------------------------
qui dentro l'oggetto config non è attivo a meno che non gli venga
passato. Mi è stato suggerito tempo fa di fare Config::var ma questo
funziona solo se la var è dischiarata come const e non con public o
private.
nelle mie intenzioni quando istanzio la classe DB dovrei trovarmi
connesso al database e con un handle attivo. lo script che usa queste
due classi dovrebbe essere all'incirca così:
<?
require_once($_SERVER['DOCUMENT_ROOT'].'/lib/appInit.php'); //includo
una classe che contiene la famigerata funzione autoload ;-)
$config = new Config();
$db = new DB($config);
?>
--------------------------------------------------------------------------------
qui sto passando l'oggetto $config a $db me se fosse possibile
preferirei non farlo, anche perche non vorrei dovre modificare la firma
del costruttore ogni volta che decido di cambiare qualcosa. Altra
soluzione che ho trovato è far estendere Config a DB, che a livello
logico non ha molto senso
ripeto tutto questo piu che per il caso specifico mi serve per dare una
struttura seria a tutta l'applicazione e fare in modo che all'occorrenza
per usare un metodo di una classe da un altra sia sufficiente fare un
new().
se non sono stato abbastanza chiaro domandate pure, se volete anche
all'indirizzo msechi(chiocciola)gmail punto com
ciao e grazie a tutti
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 sufficiente fare un new().
IMHO hai una visione un po' ristretta della programmazione OO se vuoi
imporre un limite di questo tipo.
Comunque, nel caso specifico, IMHO puoi risolvere implementando il
pattern singleton per la classe Config.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
perche' no?
Grazie
Alessandro

 perche' no?
Possono essere disabilitati tramite configurazione, se usati rendono il
tuo codice non completamente portabile, generano problemi se utilizzi
PHP insieme ad XML.
