Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1
    Allora, un po' di cose da dire:

    - per fare una classe con tutti metodi e proprieta' statiche devi avere una buona ragione (e accade raramente), e questo non e' il caso
    - mysqli e' un'interfaccia via-di-mezzo che non ha molta ragione di essere, visto che PDO e' superiore in ogni aspetto: ergo usa PDO
    - il fatto che ti dia tutti NULL e' strano, anche sbagliando i dati di accesso almeno la versione del client dovrebbe mostrartela
    - la memoria viene liberata automaticamente al termine dell'esecuzione dello script, al limite la tua preoccupazione dev'essere quanta memora usi nello script, ma a liberarla ci pensa PHP da solo

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    - per fare una classe con tutti metodi e proprieta' statiche devi avere una buona ragione (e accade raramente), e questo non e' il caso
    Come mai dici che non è il caso di creare questi metodi statici?
    ...non è meglio avere una sola instanza per la connessione al DB piuttosto che crearne varie, 1 per ogni sentenza che si deve effettuare sul DB?
    Se non fosse un metodo statico getDBC() dovrei instanziare ogni volta un oggetto per ogni sentenza, mentre così faccio riferimento sempre alla stessa prorietà statica:
    private static $instancia

  3. #3
    Quote Originariamente inviata da robynosse Visualizza il messaggio
    Come mai dici che non è il caso di creare questi metodi statici?
    ...non è meglio avere una sola instanza per la connessione al DB piuttosto che crearne varie, 1 per ogni sentenza che si deve effettuare sul DB?
    Se non fosse un metodo statico getDBC() dovrei instanziare ogni volta un oggetto per ogni sentenza, mentre così faccio riferimento sempre alla stessa prorietà statica:
    private static $instancia
    Non e' necessario usare un singleton per riutilizzare una connessione, basta fare piu' query usando lo stesso oggetto $db.

    Poi per un singleton e' necessario solo UN metodo statico: quello che restituisce un'istanza della classe, il resto dei metodi e delle proprieta' non ha senso che siano statici (se usi solo metodi e proprieta' statiche di fatto non usi nemmeno un'istanza della classe, ma usi la classe come una libreria di funzioni e variabili globali con un prefisso).

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Poi per un singleton e' necessario solo UN metodo statico: quello che restituisce un'istanza della classe, il resto dei metodi e delle proprieta' non ha senso che siano statici
    Ma come faccio ad usare proprità NON statiche all'interno di un metodo statico?
    ...non potrei scrivere questo:
    codice:
    self::$instancia=new mysqli(self::$host, self::$nombre, self::$pw, self::$dbNome);
    all'interno della classe ModelloPrototipo ho questi 3 metodi:
    codice:
     public function __construct() {
            self::$instancia = Db::getDBC();
        }
        
       static function getDBC() {
            return self::$instancia;
        }
        protected function ejecutaQuery($sql) {
            try {
                return self::$instancia->query($sql);
            } catch (Exception $e) {
                die('Connección error [' . self::$instancia->error . ']');
            }
        }
    Potrei eliminare la classe Db ma l'ho fatto proprio per separare la "logica" di connessione al db da quello che erano i metodi per gestire le operazioni sul db stesso.

    I metodi all'interno della classe ModelloPrototipo mi permettono di effettuare delle operazioni del genere all'interno dei controller:
    codice:
    $modello=$this->getModello("nome_tabella");
    $modello->aggiorna($arrayDati,$arrayCondizioni);
    .
    .
    .
    .
    $modello->nuovo($arrayDatiNuovoRecord)

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.