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

    [PHP]consiglio struttura classi

    Buongiorno, volevo chiedervi un consiglio su come strutturare al meglio e estendere queste classi:

    codice:
    abstract class MyConn{
      //questa classe contine i metodi per connettersi al database e per prelevare o inserire i dati
    }
    
    class gestione{
      //questa classe contiene dei metodi pubblici generici che vorrei utilizzare per tutte le 
    sottoclassi
      //il costruttore apre la connessione mysql
    }
    
    class user extends gestione{
      //questa classe contiene metodi per loggarsi, recuperare informazioni utenti e via dicendo
      //il costruttore istanza la classe user
    }
    il problema è che così facendo la classe user per utilizzare i metodi di myconn deve istanziare la connessione che gestione passa ad user quando la istanza.
    Come sarebbe il miglior modo di relazionarle?

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    una cosa che risalta subito all'occhio è questo

    class user extends gestione{
    //questa classe contiene metodi per loggarsi, recuperare informazioni utenti e via dicendo
    //il costruttore istanza la classe user
    }

    c'è gia un errore di progettazione, sei sicuro che utente debba essere esteso da una classe gestione??? Gestione è un sotto tipo di utente??

  3. #3
    quoto bstefano79: una classe eredita da un'altra per specializzarla meglio, con un esempio:

    gatto extends felino extends vertebrato extends animale

  4. #4
    lo so,avete perfettamente ragione,purtroppo queste classi vengono da un progetto già esistente (non mio) e finalmente ho avuto l'ok per riscriverlo e volelo risistemarle tenendo però la diversificazione delle classi e dei metodi

    Quello che vorrei fare io è una classe che istanzi,a seconda di cosa mi serve, la user, la blog, la forum e che queste classi possona usufruire dei metodi della myConn

  5. #5
    per fare quello che ti serve, secondo i precetti della OOP, devi definire una interfaccia e far sì che ogni classe implementi quella interfaccia. Potrai così realizzare un metodo che restituisce la classe che ti serve all'occorrenza perchè sei sicuro che tutti implementano la stessa interfaccia.
    E' un po' uno sbattimento in fase di analisi ma poi dovrebbe essere fatto una vota per tutte.

    ciao

  6. #6
    Originariamente inviato da chrismo
    per fare quello che ti serve, secondo i precetti della OOP, devi definire una interfaccia e far sì che ogni classe implementi quella interfaccia. Potrai così realizzare un metodo che restituisce la classe che ti serve all'occorrenza perchè sei sicuro che tutti implementano la stessa interfaccia.
    E' un po' uno sbattimento in fase di analisi ma poi dovrebbe essere fatto una vota per tutte.

    ciao
    ciao,grazie per la risp..scusa un pò la mia ignoranza ma le interfacce purtroppo nn le ho mai usate.ho cercato ed ho visto a cosa servono, thx... una cosa nn ho capito. nell'interfaccia io posso esplicare i metodi o li posso solo dichiarare ed obbligare poi la classe non abstract che la implementa a esplicarli? Se nn ti è troppo disturbo, potresti farmi un esempio di come all'incirca esplicheresti il mio problema?

  7. #7
    l'interfaccia permette solo di dichiarare i metodi e le proprietà di una classe senza l'implementazione, quella deve essere demandata alla classe che implementa l'interfaccia.
    Un esempio veloce (ma in rete ne trovi quanti ne vuoi e di migliori):
    codice:
    < ?
    interface employee
    {
    	function setdata($empname,$empage);
    	function outputData();
    }
     
    class Payment implements employee
    {
    	function setdata($empname,$empage)
    	{
                //Functionality
    	}
     
    	function outputData()
    	{
    		echo "Inside Payment Class";
    	}
    }
     
    $a = new Payment();
    $a->outputData();
    ?>
    Fai qualche esperimento per familiarizzare con le interfacce....
    ciao

  8. #8
    vediamo se ho capito bene, dovrei fare cosi:

    codice:
    interface myConn{
    
      function getConnection();
    
    }
    
    interface user extends myConn{
      
      function getOnlineUser();
    
    }
    
    class gestione implements user{
    
      function getConnection(){
      }
    
      function getOnlineUser(){
      }
    
    }
    in questo modo se volessi creare un'altra classe, la dichiarerei sempre come interface e la implementerei nella gestione? fino a qui sto andando bene?
    se è così però, la gestione diventerà una classe immensa xchè sarà li che esplico tutte le funzioni...non ci sta un modo per separare le parte esplicate così da rendere il codice più leggibile? o sbaglio qualcosa?

  9. #9
    Utente di HTML.it L'avatar di lloyd27
    Registrato dal
    Mar 2006
    Messaggi
    256
    A parte che non si può estendere un'interfaccia, ma qua secondo me hai già un problema nel tipo di collegamento che c'è tra "gestione", "Myconn" e "user".
    Il primo consiglio di base è questo: uniforma il codice. Non puoi avere gestione, Myconn e user, ovvero
    gestione = italiano, nome completo, iniziale minuscola
    Myconn = inglese, nome abbreviato, iniziale maiuscola
    user = inglese, nome completo, iniziale minuscola

    Già questo è un brutto punto di partenza.

    Ora, per venire al tuo problema, prova per favore a spiegare a cosa serve di preciso la classe gestione. Forse mi sfugge qualche dettaglio, ma non riesco a capire a cosa serva. Per come la vedo io, hai due classi indipendenti:
    Codice PHP:
    <?php

    interface ConnectionInterface
    {

      public function 
    __construct($configuration);

      public function 
    query($query);

    }

    class 
    PDOConnection implements ConnectionInterface
    {

      private 
    $resource null;

      public function 
    __construct($configuration)
      {
        
    $this->resource = new PDO('mysql:host=' $configuration['host'] . ';dbname=' $configuration['dbname'], $configuration['username'], $configuration['password']);
      }

      public function 
    query($query)
      {
        return 
    $this->resource->query($query)->fetchAll(PDO::FETCH_ASSOC);
      }

    }


    class 
    User
    {

      private 
    $connection null;

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

    }
    Questo è fatto tutto abbastanza di fretta. Se mi spieghi bene a cosa serve "gestione" magari posso aiutarti ulteriormente

  10. #10
    allora,intanto grazie per la tua risposta, la classe gestione veniva usato nel vecchio progetto per contenere dei metodi comuni che la classe user ed altre classi utilizzavano, tipo conversione delle date, funzioni di calcolo, ed ancora me la devo leggere tutta ^^ la mia idea era quella di creare una superclasse che raccogliesse metodi di classi separate in modo da poterle richiamare quando necessario, nn so se mi son spiegato bene ^^

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.