Ciao
mi ripresento con una domanda simile a una fatta poco tempo fa. Ho un po di esperienza con php4 ma vorrei capire come strutturare un applicazione in php 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 perchè quando ho scritto altre volte forse non sono stato troppo chiaro. In pratica vorrei fare una semplice classe per connettermi a un DB mettendo le variabili per la connessione in una classe esterna:
qui dentro l'oggetto config non è attivo a meno che non gli venga passato. Mi è stato giustamente suggerito da marketto tempo fa di fare Config::var ma questo funziona solo se la var è dischiarata come const e non con public o privatecodice: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; } }
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 all'incirca così:
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.codice:<? require_once($_SERVER['DOCUMENT_ROOT'].'/lib/appInit.php'); //includo una classe che contiene la famigerata funzione autoload ;-) $config = new Config(); $db = new DB($config); ?>
ripeto tutto questo piu che per il caso specifico mi serve per dare una struttura seria atutta l'applicazione e fare in modo che all'occorrenza per usare un metodo di una classe da un altra sia sufficiente fare un new()
forse ancora una volta non sono stato troppo chiaro, nel caso domandate pure
ciao e grazie a tutti