Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Non per difendere o attaccare nessuno ma a parere mio l'errore più grosso è stato chiedere consigli sulla oop in un forum.... puoi essere il migliore del mondo nel programmare in oop di php ma troverai SEMPRE qualcuno a cui non andrà bene qualcosa ovviamente perchè ha studiato con altri sistemi da altre parti. Quindi a parer mio una cosa sola devi fare... prenditi qualche script per la connessione al db in oop (tanto se ne trovano tante in giro) e vedi le tue mancanze, ragionando sulla medesima e eventualmente apportare migliorie usandola.... Ciao ciao
    OT : non sono completamente d'accordo con te.
    Io mi trovo nelle stesse condizioni di Evil (magari avendo fatto mezzo passo in più) e sinceramente ringrazio il cielo che ci sia questo forum e persone bendisposte a farmi notare i problemi e ad aiutarmi a superare le difficoltà.
    Poi ad un certo livello di competenza si tratta di scambio di opinioni e valutazione nell'intraprendere una soluzione più che un'altra.

    Passare da leggere un codice procedurale ad interpretare una oop non è una cosa molto complessa ed diventa disarmante prendere una classe già bella che pronta e utilizzarla senza capire cosa realmente fa.

    Buona cosa è iniziare a fare la propria classe db, cosi da poter costatare passo passo che è quello che si sta scrivendo sono cazzate e che conviene utilizzare una classe di "marca" hihihi di qualche framework.

    Però quanto arrivi a capire che quello che stai facendo sono giochetti hai una base necessaria per analizzare un classe ben strutturata...

    Ovvio questa è solo la mia opinione data dalla mia esperienza

    Ciao Ciao
    Che mestiere difficile.....essere da soli ancora di più

  2. #12
    usa PDO....................!
    Questa volta, più che un voto.. è favoreggiamento.

  3. #13
    Originariamente inviato da EvilEmpire
    WOW, funziona!!!
    Siete grandi. Ma giusto per capire: tra le proprietà non devo immettere il valore di una variabile, ma soltanto nel metodo, dunque questa viene resa disponibile fuori dalla classe?

    codice:
    public $conn;
    
    // metodo
    $this->conn = "bla bla bla"
    In questo modo la variabile pubblica $conn può essere usata in tutto lo script liberamente, giusto?

    @Santino
    Hai perfettamente ragione riguardo MySQLI e PDO, ne sono cosciente, ma sto facendo un passo alla volta. Dal procedurale sono passato -almeno ci provo- all'OOP. Una volta terminato guarderò anche PDO

    Grazie ancora ragazzi!
    Evil
    ciao,

    se la tua classe è:
    Codice PHP:
    class dbconnect {
        public 
    $host "nomehost";
        public 
    $login "login";
        public 
    $pass "pass";
        public 
    $database "nome_DB";
        
        function 
    connection() {
            
    $db mysql_connect($this->host$this->login$this->pass)
                or die (
    'Unable to connect!');
            
    mysql_select_db($this->database$db) or die(mysql_error($db));
        }
        

    le 4 proprietà sono tutte pubbliche quindi accessibili dall'esterno..

    Questo:
    Codice PHP:
    $db = new dbconnect();
    echo 
    $db->host
    darà come risultato:
    Codice PHP:
    nomehost 
    cosi come:
    Codice PHP:
    echo $db->login;
    echo 
    $db->pass 
    darà:
    Codice PHP:
    loginpass 
    è sempre meglio partire con tutte le proprietà private (o protette se stai codificando classi astratte) poi vedi piu avanti se è il caso di renderle pubbliche.
    Sicuramente i dati "sensibili", come il login e la pass del db non vanno mai public..

    Torno a consigliarti comunque di imparare PDO che fa già tutto quello che ti serve.. Spendi il tuo tempo per risolvere altri problemi che è meglio..
    Questa volta, più che un voto.. è favoreggiamento.

  4. #14
    Rieccomi! Chiarissimi i concetti di public e private adesso, ma sto continuando a sviscerare quello che ho imparato con le classi. Tra l'altro sono passato (finalmente) a MYSQLI
    Ho aggiunto un metodo alla classe, e nel modo seguente funziona bene:
    Codice PHP:
    class DBconnect {
        
        
    // proprietà o membri
        
    private $host "nomehost";
        private 
    $login "login";
        private 
    $pass "pass";
        private 
    $db "nomedb";
        public 
    $mysqli;
        
        
    // metodi
        
    public function db_connection() {
            
    $this->mysqli = new mysqli($this->host$this->login$this->pass$this->db);
            
            if (
    $this->mysqli->connect_errno) {
                echo 
    'Errore di connessione al DB ' $this->mysqli->connect_error;
                exit();
            }
        }
        
        public function 
    get_surnames() {
            
    $this->mysqli = new mysqli($this->host$this->login$this->pass$this->db);
            
            if (
    $this->mysqli->connect_errno) {
                echo 
    'Errore di connessione al DB ' $this->mysqli->connect_error;
                exit();
            }
            
    $query 'SELECT * FROM people';
            
    $result $this->mysqli->query($query);
            
            if (
    $result->num_rows 0) {
                while (
    $row $result->fetch_array(MYSQLI_ASSOC)) {
                    echo 
    $row['people_cognome'] . '
    '
    ;
                }
            } else {
                    echo 
    'Non ci sono record da mostrare!';
            }
        }

        
    }

    $cognomi = new DBconnect();
    $cognomi->get_surnames(); 
    Ma vi chiedo una cosa: come mai, se uso quest'altro metodo non funziona?
    Codice PHP:
    class DBconnect {
        
        
    // proprietà o membri
        
    private $host "nomehost";
        private 
    $login "login";
        private 
    $pass "pass";
        private 
    $db "nomedb";
        public 
    $mysqli;
        
        
    // metodi
        
    public function db_connection() {
            
    $this->mysqli = new mysqli($this->host$this->login$this->pass$this->db);
            
            if (
    $this->mysqli->connect_errno) {
                echo 
    'Errore di connessione al DB ' $this->mysqli->connect_error;
                exit();
            }
        }
        
        public function 
    get_surnames() {
            
    $query 'SELECT * FROM people';
            
    $result $this->mysqli->query($query);
            
            if (
    $result->num_rows 0) {
                while (
    $row $result->fetch_array(MYSQLI_ASSOC)) {
                    echo 
    $row['people_cognome'] . '
    '
    ;
                }
            } else {
                    echo 
    'Non ci sono record da mostrare!';
            }
        }

        
    }

    $cognomi = new DBconnect();
    $cognomi->get_surnames(); 
    Mi appare il seguente errore:
    codice:
    Fatal error: Call to a member function query() on a non-object in /Applications/MAMP/htdocs/NUOVO/cap 11/prova_mysqli.php on line 24
    Grazie in anticipo per le risposte e, soprattutto, per la comprensione

  5. #15
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Allora :

    Il fatto che tu abbia istanziato l'oggetto DBconnect non significa che tu abbia effettuato la connessione.

    Codice PHP:
    $cognomi = new DBconnect(); 
    $cognomi->db_connection();
    $cognomi->get_surnames(); 
    Devi richiamare prima il metodo di connessione e poi eseguire gli altri metodi dipendenti dalla connessione...
    Che mestiere difficile.....essere da soli ancora di più

  6. #16
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    P.s E' un pò tanto bruttina la cosa che hai fatto.
    Dovresti cercare almeno di separare le entità

    Codice PHP:
    class DBconnecction{
    //come la tua
    }

    class 
    person{
        public function 
    get_surnames($db) { 
            
    $query 'SELECT * FROM people'
            
    $result $db->mysqli->query($query); 
             
            if (
    $result->num_rows 0) { 
                while (
    $row $result->fetch_array(MYSQLI_ASSOC)) { 
                    echo 
    $row['people_cognome'] . '
    '

                } 
            } else { 
                    echo 
    'Non ci sono record da mostrare!'
           } 
    }

    $db = new DBconnect(); 
    $db db_connection();
    $person = new person();
    $person->get_surnames($db); 
    Che mestiere difficile.....essere da soli ancora di più

  7. #17
    una connessione non ha un cognome...
    Questa volta, più che un voto.. è favoreggiamento.

  8. #18
    @Fractals e @Evil

    Allora le cose sono due: o usate la classe DBconnection per NASCONDERE AL RESTO DEL MONDO IL DRIVER UTILIZZATO ( mysqli/pdo_mysql/altri) fornendo quindi metodi astratti per parlare col database, oppure trasformatela in una Factory che ritorni l'istanza del driver con un metodo statico getConnection... Insomma, così com'è non serve a nulla e semplicemente vi affaticate su una classaccia.

    quella classe Person poi.... non potete - si potete, ma non si fà - iniettare il database come parametro in ogni metodo della classe come avete fatto con "get_surnames" ... o gli fate un metodo tipo setConnection($db) in maniera che la classe conservi dentro di se una reference alla connessione, oppure cambiate proprio strategia. Personalmente dividerei completamente le classi: una classe Person che ha solo metodi get/set del tipo getName/setName, getLastname/setLastname, getId/setId, getAge/setAge e stop, e una class PersonRepository con tutti i metodi per fare il retrieve/save di oggetti person con tutti i modi possibili.

    esempio:

    Codice PHP:


    class Person{

    private 
    firstName;

    public function 
    __construct($firstName null){ $this->firstName $firstName; }

    public function 
    getFirstname(){ return $this->firstName; }

    public function 
    setFirstname($firstName){ $this->firstName $firstName; }

    }



    class 
    PersonRepository{

    private 
    $db;

    public function 
    __construct($db){ $this->db $db; }

    public function 
    findPeopleByFirstName(){ ....... }

    public function 
    findAll(){ }

    public function 
    save(Person $obj){ }

    public function 
    saveAll(array $people){ ... }

    public function 
    delete(Person $obj){ ...}

    public function 
    deleteBy(...){ ... }

    .......


    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #19
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    636
    esistono ORM già belli e pronti in php. Come ad esempio RebBeanPHP .
    Si impara in 10 minuti, si configura in 2 secondi e fa il suo sporco lavoro.

  10. #20
    Originariamente inviato da longilineo
    esistono ORM già belli e pronti in php. Come ad esempio RebBeanPHP .
    Si impara in 10 minuti, si configura in 2 secondi e fa il suo sporco lavoro.
    si ma quà stanno "imparando" a programmare ad oggetti...ovviamente iniziando sempre dal punto piu difficile
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.