Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Oggetti PHP

  1. #1

    Oggetti PHP

    Salve,
    sto costruendo una piattaforma di "e-commerce" particolare utilizzando OOP

    visto che sono poco pratico nella programmazione a oggetti volevo sapere se questo era "il metodo giusto" prima di cominciare a scrivere il codice.

    Avevo pensato a una superclasse contenente metodi che possono essere utili alle altre, più la gestione del database, ho chiamato la classe project class

    Per gli utenti ho pensato ad una classe che si chiama ovviamente user class, che estendeva la project class e che gestiva appunto l'iscrizione, la verifica e la conferma degli utenti.

    Il problema è far passare le connessioni del database all'user class che risolvo estendendola al project. Se però volessi estendere altre classi dovrò richiamare ogni volta i dati del database? Volevo evitare di scriverlo ogni volta, ma anche evitare di fare troppi annidamenti tra le classi

    Spero di esser stato chiaro,
    Grazie per ogni aiuto

  2. #2
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    visto che sono poco pratico nella programmazione a oggetti volevo sapere se questo era "il metodo giusto" prima di cominciare a scrivere il codice.
    non esiste "il metodo giusto", ma solo "il metodo adatto alla situazione"...
    e dopo essermene uscito con questa inutile frase, ti indirizzo verso Dependency injection , che mi sembra che sia il pattern che stai cercando

    http://en.wikipedia.org/wiki/Dependency_injection
    http://net.tutsplus.com/tutorials/ph...injection-huh/
    http://symfony.com/doc/2.0/component...roduction.html

  3. #3
    per me la soluzione più facile è creare nella classe principale una funzione __construct come la seguente:

    Codice PHP:
    class Main {
      protected 
    $connDB;

      function 
    __construct() {
        
    $this->connDB = array('localhost''username''password''database');
      }

      public function 
    recordset($sql) {
        
    $mysqli = new mysqli($this->connDB[0], $this->connDB[1], $this->connDB[2], $this->connDB[3]);
       
    // continua....
      
    }
    }

    class 
    User extends Main {
      function 
    __construct() {
        
    parent::__construct();
      }
      
      
    }
    // script principale
    $user = new User();
    $user->recordset("SELECT * FROM users"); 
    in tal modo user userà tutte le funzioni di Main, anche quelle ad esempio per recuperare un recordset dato che sa che .parent::__construct(); recupera i dati creati dal __construct di Main()

  4. #4
    Originariamente inviato da Emulman in tal modo user userà tutte le funzioni di Main, anche quelle ad esempio per recuperare un recordset dato che sa che .parent::__construct(); recupera i dati creati dal __construct di Main()
    è raccapricciante questa affermazione, soprattutto la parte finale... ma almeno hai idea di cosa fa la function __construct ( o meglio, il magic method come lo definisce PHP) ?

    Per il resto, una letta ai link suggeriti la darei
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Santino, io uso questo metodo da tantissimo tempo per le mie webapps e funziona benissimo... __construct inizializza le variabili che vengono usate in una classe, e se nel __construct di una classe ereditata ci metti parent::__construct eredita pure le variabili inizializzate nel __construct della classe madre, per cui non c'è alcun bisogno di ridefinire quelle variabili...quindi non mi sembra tanto raccapricciante anzi aiuta tantissimo a risparmiare tempo e fatica!

  6. #6
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    immagino che per alcuni sia sufficiente un "basti che funzioni"
    Comunque, se posso darvi un suggerimento, penso che una ricerca su google con chiave "Design Pattern in php" possa farvi scoprire un mondo. Non bisogna re-inventare la ruota, tutti i problemi comuni sono già stati risolti: bisogna imparare ad adattare delle buone pratiche di programmazione

  7. #7
    Originariamente inviato da Emulman
    Santino, io uso questo metodo da tantissimo tempo per le mie webapps e funziona benissimo... __construct inizializza le variabili che vengono usate in una classe, e se nel __construct di una classe ereditata ci metti parent::__construct eredita pure le variabili inizializzate nel __construct della classe madre, per cui non c'è alcun bisogno di ridefinire quelle variabili...quindi non mi sembra tanto raccapricciante anzi aiuta tantissimo a risparmiare tempo e fatica!
    Non è raccapricciante il metodo __construct, è raccapricciante la definizione che ne dai e come pensi che funzioni. Infatti ti basterebbe fare

    Codice PHP:
    <?php
    class Foo{

    protected 
    $myVar;

    public function 
    __construct(){
    $this->myVar "Hello";
    }

    }


    class 
    Bar extends Foo{

    public function 
    sayHello(){

    echo 
    $this->myVar.' World!';
    }

    }

    $bar = new Bar();
    $bar->sayHello();
    e scopriresti che la frase
    e se nel __construct di una classe ereditata ci metti parent::__construct eredita pure le variabili inizializzate nel __construct della classe madre
    è raccapricciante e che ha senso ridefinire il costruttore delle classe figlia e richiamare il costruttore della classe madre solo se HAI BISOGNO di ridefinire il costruttore della classe figlia, e che comunque le "variabili della classe madre" le eredita lo stesso e che, se ridefinisci il costruttore nella classe figlia senza chiamare il parent, al più queste variabili della madre non sono valorizzate, ma la figlia le eredita eccome (ovviamente se la figlia ridefinisce il construct e non richiama parent::__construct, è probabile che a runtime l'oggetto non funzioni come ci si aspetti o che non funzioni affatto)

    Detto questo, @.Kurt, alla fine è anche inutile suggerire di dare uno sguardo ai design pattern, tanto poi ci si perde sui costruttori ... per non parlare di IoC e affini.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.