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

    passaggio da procedurale a oop

    Buongiorno a tutti,

    sono un appassionato dilettante di php, quel poco che ho fatto l'ho scritto sempre con php procedurale,
    ora vorrei passare a php ad oggetti, per questo vorrei una delucidazione:

    prima scrivevo:

    Codice PHP:
    function utenti(){
    $array_utenti = array();
    $query_utenti mysql_query("SELECT utenti.nome, utenti.cognome, utenti.foto, utenti.email, siti.url FROM utenti INNER JOIN utente_sito ON utenti.id = utente_sito.utente INNER JOIN siti ON siti.id = utente_sito.sito ORDER BY siti.url ASC");
    while (
    $row mysql_fetch_assoc($query_utenti)): $array_utenti[] = array(
    "nome" => $row['nome'],
    "cognome" => $row['cognome'],
    "foto" => $row['foto'],
    "email" => $row['email'],
    "url" => $row['url']
    );
    endwhile;
    $utenti = array();
    foreach (
    $array_utenti as $utente) {
    $utenti[] = array(
    "nome" => $utente['nome'],
    "cognome" => $utente['cognome'],
    "foto" => $utente['foto'],
    "email" => $utente['email'],
    "url" => $utente['url']
    );
    }
    return 
    $utenti;
    }
    $utenti utenti();
    foreach (
    $utenti as $utente) {
    echo 
    $utente['url']."<br />";
    echo 
    $utente['nome']."<br />";
    echo 
    $utente['cognome']."<br />";
    echo 
    $utente['foto']."<br />";
    echo 
    $utente['email']."<hr>";

    ora scrivo:

    Codice PHP:
    class Editor{
    public function 
    utenti(){
    $array_utenti = array();
    $query_utenti mysql_query("SELECT utenti.nome, utenti.cognome, utenti.foto, utenti.email, siti.url FROM utenti INNER JOIN utente_sito ON utenti.id = utente_sito.utente INNER JOIN siti ON siti.id = utente_sito.sito ORDER BY siti.url ASC");
    while (
    $row mysql_fetch_assoc($query_utenti)): $array_utenti[] = array(
    "nome" => $row['nome'],
    "cognome" => $row['cognome'],
    "foto" => $row['foto'],
    "email" => $row['email'],
    "url" => $row['url']
    );
    endwhile;
    $utenti = array();
    foreach (
    $array_utenti as $utente) {
    $utenti[] = array(
    "nome" => $utente['nome'],
    "cognome" => $utente['cognome'],
    "foto" => $utente['foto'],
    "email" => $utente['email'],
    "url" => $utente['url']
    );
    }
    return 
    $utenti;
    }
    }
    $class_editor = new Editor();
    $utenti $class_editor->utenti();
    foreach (
    $utenti as $utente) {
    echo 
    $utente['url']."<br />";
    echo 
    $utente['nome']."<br />";        
    echo 
    $utente['cognome']."<br />";
    echo 
    $utente['foto']."<br />";
    echo 
    $utente['email']."<hr>";

    secondo voi è corretto?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    La programmazione ad oggetti ha una sua filosofia, non basta prendere una funzione e chiuderla dentro una classe.

    Una classe deve avere una ragione per esistere, deve rappresentare un'entità che abbia degli attributi e delle funzionalità che la caratterizzano.

    Quello che stai facendo tu è solo una raccolta di funzioni messe in una classe, questo si può fare con un "trait", che è appunto una raccolta di funzioni.
    Una classe è una cosa diversa.
    Ultima modifica di Alhazred; 10-09-2016 a 22:23

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

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Grazie mille per le risposte,
    in effetti ho ancora molto da studiare

    Ma in oop come avrei dovuto scrivere?

    grazie mille ancora
    buona giornata

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    In OOP una classe contenente solo funzioni di servizio è in realtà un trait.

    Una classe è la rappresentazione di un'entità che abbia degli attributi e delle funzionalità caratterizzanti, come ti ho già scritto.
    Per esmpio un utente, che avrà un username, un'email, un nome, un cognome, una data di nascita ecc.., poi avrà funzioni per recuperare i vari attributi, per modificarli ecc...

    Dal punto di vista sintattico la tua è effettivamente una classe scritta correttamente, ma dal punto di vista semantico (significato) ne fai un uso inappropriato.

  6. #6
    Quote Originariamente inviata da Enrico1207 Visualizza il messaggio
    Grazie mille per le risposte,
    in effetti ho ancora molto da studiare

    Ma in oop come avrei dovuto scrivere?

    grazie mille ancora
    buona giornata
    diciamo che in OOP avresti usato, vuoto per pieno, almeno una 15na di oggetti per fare quello che hai fatto, tra oggetti scritti da te e oggetti sfruttati da librerie opportune
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Per cui per estrarre dei dati da db e metterli in un array in oop come dovrei fare?
    o dovrei evitare per cose del genere?

  8. #8
    Quote Originariamente inviata da Enrico1207 Visualizza il messaggio
    Per cui per estrarre dei dati da db e metterli in un array in oop come dovrei fare?
    o dovrei evitare per cose del genere?
    Enrico purtroppo se non conosci quello di cui stai parlando (l'OOP) è inutile risponderti perchè sarebbe una risposta assai lunga. l'OOP non è, come ti è stato già detto, "mettere tutto quello che facevo in procedurale in un metodo di una classe": è una filosofia diversa, fatta di oggetti che cooperano per raggiungere il risultato finale, responsabilità degli oggetti, riusabilità del codice, coesione delle classi, accoppiamento... Non è "come si prende da un db dei dati se si mettono in un array". Prova a darti una letta a questo http://www.html.it/guide/guida-progr...-agli-oggetti/ o a ponderare di prendere qualche libro (vedi anche quelli che ti ho consigliato)

    EDIT: altrimenti dovrei risponderti: Fai un'entità e mappala con doctrine, poi usi l'entity manager per ottenere il repository dell'entità e poter usare il metodo find per ricercare le entità che ti servono, a questo punto otterrai un ArrayList (o se vuoi un array normale) di oggetti
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Capito Compro il manuale e ci sentiamo tra un po' di tempo.
    Grazie per le risposte intanto.

    buona giornata a tutti

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.