Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [php] & Oop

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

    [php] & Oop

    Ciao a tutti,

    Sto cercando di strutturare in modo più ordinato le mie applicazioni scritte iniziando a introdurre concetti OOP (i pattern per ora li lascio da parte).

    Ho buttato su carta uno schizzo di come creare le classi ed ora faccio un esempio semplicistico per avere qualche suggerimento su come agire.

    Classe : Database
    Classe : User
    Classe : Intervento

    Con la classe database mi istanzione l'oggetto che effettua la connessione e che ha tutti i metodi per eseguire sql su db (SELECT,INSERT,DELETE ecc ecc)

    Quando io istanzio l'oggetto user come faccio ad accedere ai metodi del database?

    sarebbe una soluzione istanziare l'oggetto User passandogli come parametro l'oggetto del database e salvarmelo ad esempio in una proprietà dell'oggetto user creato?

    Sfruttare l'ereditarietà mi sembra logicamente scorretto anche perche tutte le classi andrebbero a estendere la classe db il che sono entità completamente diverse.

    Mi è sembrato interessante anche l'utilizzo delle interfacce, ma non utile al mio caso....

    Voi quali metodi utilizzate?

    Ciao e grazie a tutti quelli che risponderanno.
    Paolo
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Quando io istanzio l'oggetto user come faccio ad accedere ai metodi del database? sarebbe una soluzione istanziare l'oggetto User passandogli come parametro l'oggetto del database e salvarmelo ad esempio in una proprietà dell'oggetto user creato?
    vai cosi

    in oop si chiama aggregation o composition o dependency-injection
    http://stackoverflow.com/questions/1...and-dependency

    http://stackoverflow.com/questions/1...ency-injection

    be questo è l'inizio ^^

    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Ciao Whisher


    Fractals visto che ci sei passa anche a PDO
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Innanzitutto grazie mille di avermi risposto.

    Ho letto gli articoli e penso di aver capito solo di aver inventato l'acqua calda...
    Il principio che ho in mente io dovrebbe appunto essere l'injection.

    Si fa a volte riferimento implicito delle interfacce ma non ho capito in che modo queste possano tornare utili nel mio caso specifico

    Non ho capito bene il concetto però di dipendenza dato che in questo tipo di implementazione non mi sembra di intuire una dipendenza, a meno che qual ora cambiasse ipoteticamente lo stato dell'oggetto database (per semplificare si passa dallo stato connesso a disconnesso), questo stato valga anche per l'oggetto user creato.

    be questo è l'inizio ^^
    Intendi dire che ci sono dei metodi migliori per affrontare questo problema?

    Fractals visto che ci sei passa anche a PDO
    Adesso però mi devi spiegare come hai fatto a capire che sto ancora usando la mysqlconnection hihihihihihihi

    Uno dei motivi per andare ad affrontare questa struttura era anche questo passaggio perchè a breve sostituiremo il db da mysql a sql e volevo fare appunto una graduale migrazione delle pagine ove è presente un unico punti di accesso al db (percui manutenibile).

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

  5. #5
    Originariamente inviato da Fractals87

    Adesso però mi devi spiegare come hai fatto a capire che sto ancora usando la mysqlconnection hihihihihihihi
    perchè hai scritto:
    Classe : Database
    se usavi PDO non ti serviva una classe database
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    se usavi PDO non ti serviva una classe database
    Ok allora vorrei aprire una parentesi in questo proposito.
    Nell'utilizzo di pdo io avevo pensato di estendere la classe riscrivendo i metodi per trattare in un modo particolare le eccezzioni (esempio scriverli in un file o inserirle in una tabella apposta con accessoriamente un invio email a me) in modo da accorgermi quando e cosa succede (dato che questa funzionalità ora non c'è e se ho un problema devo fare l'investigatore per mezza giornata e mi sono scocciato).
    Inoltre volevo integrare nella classe estesa metodi proprietari per il trattamento delle campi,
    un unico metodo per trattare il testo, un unico metodo per trattare i numerici così come le date, al fine di arrivare all'insert ed essere sicuro al 99% che questa vada a buon fine, oppure sollevando in modo appropriato una eccezione che in questo caso ritorni al client con un messaggio tipo "Ma scusa se il campo è una data e tu mi inserisci 'OGGI' cosa hai nel cervello?????"

    A fronte delle considerazioni fatte anche nel caso di pdo intendevo creare una classe ad hoc.

    E' sbagliato questo metodo di agire?

    Scusate se vi scasso ma per come la vedo io è indispensabile togliersi questi dubbi all'inizio per evitare settimane di lavoro per strutturare tutto e poi dover buttare tutto nel cestino.

    GRazie ancora e ciao ciao
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    Per come la vedo io è meglio se mantieni separate le cose..

    PDO si occupa del database.
    L'unica cosa di cui ha bisongno sono dei dati di input validi..

    Io, per questo, uso una classe "formValidator" che si pappa tutti gli input dell'utente e li valida.. Se i dati sono validi li passo al database (PDO) altrimenti visualizzo un messaggio all'utente..

    Se poi vuoi una mail ogni volta che succede qualcosa;
    ti crei una classe per le email e la usi quando vuoi monitorare un determinato processo..

    E' molto importante non confondere o mescolare le funzionalità
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ok il tuo discorso è logico.

    Suppongo resta valido il discorso di istanziare l'oggetto user passandogli l'oggetto pdo.

    Poniamo il caso che all'interno della classe user c'è un metodo InserisciNuovo Utente.
    A questo metodo gli arrivano tutti i parametri necessari per costruire l'insert.
    Contestualmente alla creazione di questo sql tramite parametri di pdo devo chiamare i metodi della classe formvalidator che trattare il dato ed eventulamente sollevare eccezzione.
    Ma come faccio ad accedere ai suddetti metodi, come """""connetto""""" la classe user (come tutte le altre classi che utilizzano sql) con la classe form validator?

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

  9. #9
    è molto "semplice"..

    Codice PHP:
    try {
      
    $pdo = new PDO();
      
    $fv = new formValidator();

      if ( isset( 
    $_POST ) ) {
        
    $fv->empty'name''Devi inserire un valore per il campo NAME' );

        if ( 
    $fv->checkErrors ) {
          
    // mostro gli errori all'utente
          
    $fv->displayErrors();
          } else {
          
    $user = new userPDO $pdo );
          
    $user->add()
        }
      }
    } catch 
    PDOException $e ) {
      echo 
    $e->getMessage();

    user.class.php
    Codice PHP:
    class user {

      private 
    $pdo;

      public function 
    __constructPDO $pdo ) {
        
    $this->pdo $pdo;
      }

      public function 
    add() {
        
    // semplificato, prima di passare il POST conviene validarlo..
        
    $data = array( ':id'=>uniqid(), ':name'=>$_POST['name'] );
        
    $insertQuery "INSERT INTO user (id, name) VALUES (:id, :name) LIMIT 1";
        
    $sql $this->pdo->prepare$insertQuery );
        
    $sql->execute$data );
      }

    Questa volta, più che un voto.. è favoreggiamento.

  10. #10
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ok sei stato molto chiaro, e l'interazione che mi hai mostrato tra pdo e la classe user è esattamente come l'avevo pensata io.

    Ho visto che la classe form validator l'hai utilizzata esternamente alla classe user.....

    E' ora di fare delle prove serie e di buttare giù un po di codice dato che sono molto più sicuro su come agire....

    Grazie per la tua disponibilità.
    Che mestiere difficile.....essere da soli ancora di più

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.