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

    Problema PHP5 OOP : Connettersi a mysql tramite classe

    Buondì.

    Stò realizzando un sito in php (logicamente) con il paradigma orientato ad oggetti.
    Non posso non ammettere che è un lavoraccio scrivere le classi.
    Ho comunque finalmente scritto delle classi. Una astratta che funge da 'padre' per le classi di connessione al db mysql con mysqli. Inoltre ho scritto una classe per richiamare i template e sostituirne i placeholder con il contenuto dinamico. Ora, ecco l'errore che sussiste quando richiamo la classe di connessione al db dell'utente con i permessi per scrivere sul db.


    Codice PHP:
    Fatal errorCall to private mysqliWriter::__construct() from invalid context in /path/list.php on line 4 
    Alla riga 4 del suddetto file c'è il richiamo della classe, ovvero :
    Codice PHP:
    $db = new mysqliReader
    Ora posto la classe di connessione al db e la classe astratta :

    Codice PHP:
    <?php abstract class connectingDb {
        abstract function 
    connect();
        abstract function 
    disconnect();
        protected 
    $host;
        protected 
    $user;
        protected 
    $password;
        protected 
    $database;
        protected 
    $connection;
        protected 
    $tmp;
        protected 
    $replacers;
        protected function 
    setHost($host) {
            
    $this->host $host;
        }
        protected function 
    setUser($user) {
            
    $this->user $user;
        }
        protected function 
    setPassword($password) {
            
    $this->password $password;
        }
        protected function 
    setDatabase($database) {
            
    $this->database $database;
        }
        protected function 
    getHost() {
            return 
    $this->host;
        }
        protected function 
    getUser() {
            return 
    $this->user;
        }
        protected function 
    getPassword() {
            return 
    $this->password;
        }
        protected function 
    getDatabase() {
            return 
    $this->database;
        }
    }
    ?>
    Codice PHP:
    <?php require_once 'path/getTemplate.php';
    require_once 
    'path/constantError.php';
    class 
    mysqliWriter extends connectingDb 
        public 
    $host;
        public 
    $user;
        public 
    $password;
        public 
    $database;
        public 
    $connection;
        public 
    $tmp;
        public 
    $replacers;
        private function 
    __construct() {
            
    $this->setHost('localhost');
            
    $this->setUser('');
            
    $this->setPassword('');
            
    $this->getDatabase('');
        }
        public function 
    connect() {
            
    $this->getHost();
            
    $this->getUser();
            
    $this->getPassword();
            
    $this->getDatabase();
            
    $this->connection = new mysqli($this->getHost(), $this->getUser(), $this->getPassword(), $this->getDatabase());
            if (
    mysqli_errno($this->connection)) {
                
    $this->tmp = new getTemplate("path/errors.html");
                
    $this->replacers = array("error" => DB_NOT_CONNECTED);
                
    $this->tmp->replace($this->replacers);
                return print 
    $this->tmp->show();
                exit();        
            }
        }
        public function 
    query($query) {
            if(
    strlen($this->connection->query($query)) > 0) {
                return 
    $this->connection->query($query);
            }
        }
        public function 
    disconnect() {
            return 
    $this->connection->close();
        }
        private function 
    __destruct() {
            unset(
    $this->host$this->user$this->password$this->database$this->connection);
        }
    }
    ?>
    Chiedo scusa per la lunghezza del codice, ma almeno c'è tutto lì. Sicuramente c'è un'errore di logica, perchè non mi pare c'è ne siano di parsing, però non si può mai sapere.
    Spero proprio che qualcuno possa aiutarmi e magari darmi qualche dritta per riuscire a procedere senza troppi errori e ad acquisire il senno che stà alla base dello sviluppo oop.


    Grazie mille,

    buonagiornata ancora

  2. #2
    Prova a definire __construct() e __destruct() come pubbliche invece che private.

  3. #3
    Originariamente inviato da filippo.toso
    Prova a definire __construct() e __destruct() come pubbliche invece che private.
    Perdincibacco, funziona !

    Ti ringrazio molto =D.

    Vorrei chiederti (giusto per ferrare il concetto), perchè bisogna dichiararla pubblica ? Non si dichiarano pubbliche solo quelle funzioni / variabili che vengono istanziate o richiamate dal file in esecuzione ? Altrimenti per non dichiarare tutto pubblico a caso, come faccio a sapere senza commettere venti volte lo stesso errore, cosa mettere public e cosa private (tralasciando il protected che ho capito) ?



    Grazie ancora, ciao ciao

  4. #4

  5. #5
    Originariamente inviato da filippo.toso
    Ti suggerisco di iniziare leggendo il manuale ufficiale:

    http://www.php.net/manual/en/language.oop5.decon.php
    Ti ringrazio ancora =). Non avevo reperito questa sezione sul sito di php. Ho letto la parte dei costruttori e distruttori, e grazie ad alcuni commenti ho anche capito più o meno quando dichiarare esplicitamente la distruzione.

    Ora mi leggerò le altre sezioni.


    Grazie ancora e buona serata.

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