Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    PHP5 - strutturare applicazione web

    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:
    codice:
    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 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 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 all'incirca così:
    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);
    ?>
    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.
    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
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  2. #2
    In verità non riesco a capire il problema e non capisco nemmeno perchè utilizzi una classe per creare quelle che potrebbero essere definite costanti.

    Ad esempio:
    Codice PHP:
    DEFINE 'DB_USER''ciccio'TRUE );
    DEFINE 'DB_PASS''pippos'TRUE );
    DEFINE 'DB_HOST''localhost'TRUE );
    DEFINE 'DB_NAME''ciccio'TRUE ); 
    a questo punto nella tua classe che gestisce la connessione al db, puoi richiamare direttamente la costante, visto che è disponibile ovunque!
    [ DarCas The Architect ]
    [ The DarCas Of Blog ]
    Chuck Norris riesce a trovare un pagliaio dentro a un ago
    :maLOL:

  3. #3
    hai ragione potrei fare cosi, potrei anche mettere i parametri di connessione dentro la mysql_connect(). Il punto che però mi interessa è (piu in generale):
    come faccio da una classe ad accedere ai metodi e alle proprieta di un altra classe in php5 senza passare il riferimento di una classe a un altra?
    nel mio caso specifico:
    come fa la classe DB al accedere ai metodi e alle proprietà della classe Config senza passare un istanza della classe config al costruttore della classe DB?

    la tua soluzione è ovviamente valida ma, se dovessi creare una classe una classe con un metodo che deve fare operazioni sul DB, mandare una mail e scrivere un file di log, questo medoto probabilmente dovrebbe accedere a metodi di altre 3 o 4 classi diverse... dovrei istanziarle tutte e passare alla classe un istanza della classe che gestisce il db, una di quella che scrive i log e una di quelle che manda le mail per rendere i metodi di queste disponibili alla prima... il che non è molto agevole

    spero di essere stato piu chiaro
    grazie
    m
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  4. #4
    up
    qualche idea?

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  5. #5
    istanzi la classe all'interno dell'altra classe, se è eterogenea...

    altrimenti, se le due classi sono simili, puoi pensare di semplificarle ulteriormente ed esterderle tra di loro, così che le proprietà di una saranno disponibili anche all'altra.

    il problema è che l'esempio di prima non ha alcun motivo di estendere o instanziare l'altra classe nell'altra.
    [ DarCas The Architect ]
    [ The DarCas Of Blog ]
    Chuck Norris riesce a trovare un pagliaio dentro a un ago
    :maLOL:

  6. #6
    ok cosi funziona è un po piu ordinato ma in effetti come dici te non ha senso (in questo caso) che la classe DB estenda la classe Config... mi sa che farò cosi se non c'è altro modo...

    sai se posso fare come in altri linguaggi qualcosa tipo
    codice:
    class A extends B, C, D {
      //...
    }
    grazie 1000 per l'aiuto

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  7. #7
    Originariamente inviato da Manuel.s
    ok cosi funziona è un po piu ordinato ma in effetti come dici te non ha senso (in questo caso) che la classe DB estenda la classe Config... mi sa che farò cosi se non c'è altro modo...

    sai se posso fare come in altri linguaggi qualcosa tipo
    codice:
    class A extends B, C, D {
      //...
    }
    grazie 1000 per l'aiuto

    Uhm... no!!

    PHP lascia estendere una sola classe alla volta... ad ogni modo ti consiglio l'acquisto di un libro molto buono di PHP5, visto che introduce a diverse novità nell'ambito delle OOP (PHP5 & MySQL - La Guida - McGraw Hill)
    [ DarCas The Architect ]
    [ The DarCas Of Blog ]
    Chuck Norris riesce a trovare un pagliaio dentro a un ago
    :maLOL:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.