Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21
  1. #11
    Originariamente inviato da neroux
    Scusa, ma questo non è corretto per niente. Il link che hai postato si riferisce alle variabili e non alle costanti.
    Le costanti sono SEMPRE global
    Azz, hai ragione...

  2. #12
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    simo990, riguardo alle PDO di php, non riesco a capire cosa faccia il metodo init($db)..

    Inoltre credo che la connessione al db e il try catch che scrivevi tu prcedentemente, vada tutto nel costruttore ???


    In altri termini, vorrei praticamente usare le PDO di php per usare il database etc... prò vorrei anche garantire che venga creata una unica istanza di PDO, quindi basarmi sul singleton pattern.
    Con i sogni possiamo conoscere il futuro...

  3. #13
    Originariamente inviato da gaten
    simo990, riguardo alle PDO di php, non riesco a capire cosa faccia il metodo init($db)..

    Inoltre credo che la connessione al db e il try catch che scrivevi tu prcedentemente, vada tutto nel costruttore ???
    init è un metodo che ho inventato io, poteva chiamarsi anche pippo, per dire.

    Comunque volevo sottolineare che non devi per forza implementare una classe Database; PDO ha già tutto quello che ti serve.

    Tuttavia una classe Database ti potrebbe tornare utile nel caso in cui tu voglia dare possibilità agli eventuali futuri programmatori della tua applicazione di poter apportare delle modifiche al tuo codice (tipo cambiare DBMS, o implementare nuovi modi di accesso al database, o addirittura usare metodi alternativi per lo storing dei tuoi dati [penso a XML, JSON ecc...]).

    Una possibile implementazione potrebbe essere questa:

    Codice PHP:
    <?php

    class Database {

      
    // istanza privata di PDO o di quello che vuoi te
      
    private static $instance;

      
    // setter statico  
      
    public static function init($db) {
        
    self::$instance $db;
      }

      
    // getter statico
      
    public static function getInstance() {
        return 
    self::$instance;
      } 
    }

    // poi farai:

    try {
      
    $db = new PDO/* qui ci metti i parametri di connessione */ );
    } catch (
    PDOException $e) {
      echo 
    "PDOException: " $e->getMessage();
    }

    Database::init($db); 


    // e infine nelle tue classi basta che fai:

    class Paperino {

      private static 
    $db;

      public function 
    __construct() {

        
    self::$db Database::getInstance();
      }
    }
    Ripeto che non hai bisogno di tutto questo, ma se fai cosi' sicuramente la tua applicazione risultera' piu' robusta e scalabile di fronte ad eventuali futuri cambiamenti.



    Ma poi alla fine di tutto questo, hai trovato qual era il problema?



    P.S.: io lascerei perdere il singleton, non ti serve (almeno in questo caso). Ti puo' essere utile invece la dependency injection (vedi esempio sopra).

    Spero di esserti stato utile.


  4. #14
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Bè io mi volevo basare su singleton pattern, poichè può capitare che in diverse pagine necessito della connessione al database ed è inutile istanziare un nuovo oggetto PDO ogni volta che mi serve la connessione... Inoltre,

    Codice PHP:
    try { 
      
    $db = new PDO/* qui ci metti i parametri di connessione */ ); 
    } catch (
    PDOException $e) { 
      echo 
    "PDOException: " $e->getMessage(); 


    Database::init($db); 
    Questa porzione di codice dove la metti ? Non è meglio inserirla in un metodo di Database, che ne sò un metodo chiamato "connect" .. o meglio ancora in un costruttore, poichè notavo che in Database non hai alcun costruttore.
    Con i sogni possiamo conoscere il futuro...

  5. #15
    Originariamente inviato da gaten
    Bè io mi volevo basare su singleton pattern, poichè può capitare che in diverse pagine necessito della connessione al database ed è inutile istanziare un nuovo oggetto PDO ogni volta che mi serve la connessione...
    Ma infatti non hai bisogno di tante istanze di PDO, te ne basta una. Il singleton lo puoi anche implementare, ma in realta' ti basta aprire la connessione una volta sola in cima alla tua applicazione (su un file che vuoi tu, non deve stare per forza dentro a una classe).

    Non è meglio inserirla in un metodo di Database, che ne sò un metodo chiamato "connect" .. ??
    No, perche' perderesti il beneficio dell'inversion of control.
    Pensaci un attimo: se la classe Database fosse stata fatta da un tuo collega, e il cliente ti chiede di passare a PostgreSQL... ti ritroveresti costretto a modificare la classe Database, rompendo magari tutte le classi che dipendono da essa.
    Se invece la connessione la implementi al di fuori della classe, sei libero di fare quello che vuoi.

    .. o meglio ancora in un costruttore, poichè notavo che in Database non hai alcun costruttore.
    Per come ho implementato la classe il costruttore non serve (e' una classe statica che non verra' mai inizializzata; un po' come la tua, dove invece hai il costruttore privato).

  6. #16
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Si ma ancora non capisco dove andrà a finire:

    Codice PHP:
    try {  
      
    $db = new PDO/* qui ci metti i parametri di connessione */ );  
    } catch (
    PDOException $e) {  
      echo 
    "PDOException: " $e->getMessage();  
    }  

    Database::init($db); 
    Inoltre con il SingletonPatterno, controllo in modo più "deciso" se esiste realmente o meno una istanza qui non sò come fai.

    Inoltre se volessi usare il singleton pattern associando le PDO di php ???
    Con i sogni possiamo conoscere il futuro...

  7. #17
    Lo metterai dove ti serve, dipende da come hai strutturato la tua applicazione.

    Il singleton, ripeto, e' inutile in questo caso (IMHO).
    Se poi cerchi su google "why singleton is evil" trovi i piu' disparati motivi...

    Il motivo principale (sempre IMHO) e' che non hai bisogno di controllare che ci sia una sola connessione attiva. Semplicemente lìmitati ad aprirne una, e hai finito.

    Un altro motivo che mi viene in mente potrebbe essere che, nel caso tu voglia implementare una unit test, ti tagli fuori tutta la parte del db (cioè vale a dire tutto), per il semplice fatto che c'è gia' un'istanza attiva in memoria

  8. #18
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    A me serve avere la connessione in più pagine, e non credo sia tanto positivo fare in diverse pagine:

    Codice PHP:
    try {   
      
    $db = new PDO/* qui ci metti i parametri di connessione */ );   
    } catch (
    PDOException $e) {   
      echo 
    "PDOException: " $e->getMessage();   
    }   

    Database::init($db); 
    Con i sogni possiamo conoscere il futuro...

  9. #19
    Se per pagine intendi richieste HTTP, c'e' poco da fare, sei obbligato a riaprire la connessione ad ogni "cambio di pagina"...

    ma in fondo non c'e' niente di male, e' cosi' che funziona

  10. #20
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    si però un conto è istanziare un oggetto ad ogni richiesta http, un altro conto è rilasciare una istanza dell'oggetto se questo è già stato istanziato precedentemente.
    Sono sempre più proiettato ad utilizzare il singleton pattern per la connessione al database, però mi piacerebbe utilizzarlo usando le PDO di php, cioè vorrei fare in modo che se non esiste alcuna istanza dell'oggetto PDO faccio una new altrimenti restituisco l'istanza esistente tramite getInstance(), come posso fare ?
    Con i sogni possiamo conoscere il futuro...

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 © 2026 vBulletin Solutions, Inc. All rights reserved.