Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885

    Dubbi sulla 'malaprogrammazione' nel concetto OOP

    ciao a tutti...

    Ho bisogno di un aiuto concettuale, non vorrei abbandonarmi alla 'mala' programmazione.

    argomento : OOP

    io vorrei fare un software basato sugli oggetti in maniera da imparare bene (in php) la OOP.

    voglio fare una login:

    io possiedo una classe chiamata utenti.php al suo interno ci sono i metodi getter e setter di un ipotetico utente (poi sarà ampliata con i dati che dovrà avere l'utente.)
    Codice PHP:
    class utenti {

        
        protected 
    $utente "";
        protected 
    $password "";
        protected 
    $livello "";
        protected 
    $idUtenza "";
        public function 
    __construct(){
            
    $this->idUtenza $idUtenza;
            
    $this->utente $utente ;
            
    $this->password $password;
            
    $this->livello $livello;
        }

        public function 
    setUtente ($utente){
          
    $this->utente $utente;
        }

        public function 
    getUtente (){
            return 
    $this->utente;
        }

        public function 
    setPassword ($password){
           
    $this->password $password;
        }

        public function 
    getPassword (){
            return 
    $this->password;
        }

        public function 
    setLivello ($livello){
           
    $this->livello $livello;
        }

        public function 
    getLivello (){
            return 
    $this->livello;
        }

        public function 
    setIdutenza ($idUtenza){
           
    $this->idUtenza $idUtenza;
        }

        public function 
    getIdutenza (){
            return 
    $this->idUtenza;
        }


    ovviamente ho una classe 'main' chiamata sessione.php dove viene richiamato tutto il necessari per effettuare una login
    Codice PHP:
    session_start();

    class 
    sessione  {

    }

    include (
    "../../domande/interrogazione.php");
    include (
    "../../configurazioni/connessione.php");

    //carico oggetti
    $interrogo = new interrogazione();
    $connessione = new Connessione();

    //Setto dell'utente nella mia classe 'utenti'
    $interrogo->setUtente($_POST['user_name']);
    $interrogo->setPassword($_POST['pass']);

    $login $interrogo->Login($interrogo->getUtente() , $interrogo->getPassword());


    if (
    $login){
        
    $_SESSION['id'] = $interrogo->getIdutenza();
        
    $_SESSION['utente'] = $interrogo->getUtente();
        
    header("Location:../../service/index.php?id_user=".$interrogo->getIdutenza());
        exit();
    }else{
        
    $_SESSION['errorelogin'] = "Riscontrato errore Tentare nuovamente l’accesso";
        
    header("Location:../../index.php?pag=accesso");
        exit();
    }

    //echo $utente->isEsistente();
    $connessione->Chiudo_Connessione(); 
    successivamente ho una classe dove vengono effettuate tutte le mie Query.. la classe si chiama interrogazioni.php

    Codice PHP:
    include ("/var/www/DTO/utenti.php");
    class 
    interrogazione extends utenti {
        
        private static 
    $nomehost"nomehost";

        public  function 
    Login ($utente $password){
            
            
    $database mysql_select_db(self::$nomehost);
            
            
    $sql "SELECT * FROM utenti;";
            
    $eseguo mysql_query($sql) or die ("ERRORE IN MYSQL_LOGIN  ".mysql_error());
            while (
    $row mysql_fetch_assoc($eseguo)){

               
    $user $row['user_name'];
               
    $pass $row['password'];
               
    $livello $row['livello'];
               
    $id $row['id_utente'];

               if (
    $user === $utente && $pass === $password){
                    
    $this->setLivello($livello);
                    
    $this->setIdutenza($id);
                    
    $trovato true;
                    break;
               }else{
                   
    $tovato false;
               }
            }
            
            return 
    $trovato;

        }
    //chiudo login 
    i miei dubbi e su come ho creato queste pagine:

    SESSIONE.PHP

    1-devo sempre includere un oggetto all'interno del mio progetto con include("xxx") o ce un metodo integrato nella OOP?
    2-se connetto il database nella pagina principale posso evitare di richiamare la classe connessione nel mio oggetto interrogazioni?

    INTERROGAZIONI.PHP

    1-io per ora mi faccio restituire un array che andrò a scorrerre nella mia classe per estrapolare i dati. Non potrei usare la classe utenti per metttere il risultato al suo interno e poi recuperarli nell'altra classe?
    2-restituire un array è cosa giusta e buona oppure è meglio evitare visto le risorse che occupa?

    vi sarei molto grato delle risposte o dei consigli che potete darmi... nelle differenti guide non ho trovato molto!

    ciao!

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Premesso che non esiste una vera metodologia giusta o sbagliata...

    Qualche osservazione.
    Nella OOP i nomi sono fondamentali, dai nomi dati ad una classe si può capire subito se c'è qualcosa che non va.
    -La classe utenti è in realtà la classe utente (gestische un singolo utente)
    -"interrogazione" è un azione e quindi mi aspetterei una funzione/metodo e non una classe con questo nome.

    Detto questo io farei una classe Operatore che estende la classe utente.
    Nella classe Operatore metterei il metodo Login.
    Qualcosa tipo

    Codice PHP:

    Class Operatore extend User{
        private 
    $isLogged false;

        function 
    Login($user,$passowrd){
            
    //TODO query: SELECT * form user where idUser = ...blablabla
            
    if (mysql_num_rows() <= 0
               return 
    false;//esce
            
            
    $this->isLogged true;
            
            
    //TODO: valorizzo i dati della classe user
            
            
    $_SESSION['id'] = $this->getIdutenza(); //ereditato
            
    $_SESSION['utente'] = $this->getUtente(); 
        }

         function 
    isLogged(){
             return 
    $this->isLogged;
         }


    Per usarla

    Codice PHP:
    $operatore = new Operatore();

    $operatore->Login($user$pass);

    if(
    $operatore->isLogged)
         
    //utente loggato
    else
         
    //fai altro 

  3. #3
    in realtà la classe Operatore è giusta e non giusta allo stesso momento...cioè a che servirebbe estendere il concetto di utente ad Operatore? senza un analisi accurata del progetto, rischi solo di fare pastrocchi e aggiungere classi che non servono ad una ceppa... vedi operatore...

    e soprattutto, se lavori in una logica MVC è piu consono che l'azione di login non sia altro che un metodo del controller, e dai ad utente soltanto i metodi per eseguire query nel database (concetto di Model). Soprattutto perchè l'utente che si auto-logga facendo lui stesso un'operazione di login e non passando per una classe Auth, mi pare un pò una cavolata... Tendenzialmente, non è che io mi presento e dico "sono loggato", ci deve essere un'entità garante che mi chieda i documenti e poi mi logghi

    cmq, prima di scrivere, fai tanta, tanta, tanta analisi, soprattutto ora che non sei pratico di oop, altrimenti ti perdi e basta
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Ok, infatti la mia premessa era cauta, esistono molte varianti del caso, ma da qualche parte bisogna iniziare.

  5. #5
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    ciao , grazie della risposta... in realtà non mi è nuovissimo il concetto di OOP , un bel po di tempo fa sviluppavo in java , ma è tutta un'altra musica....

    io prima mettevo tutto in utente.php (che era la mia classe dove conteneva i valori dell'utente) questa classe mi consevava i dati mentre in php no...

    la cosa che mi dà più preoccupazione è che nella mia 'main' ci sia una chiamata ad un metodo istanziato all'inizio ... questo metodo ritorna un array con i valori dell'utente pescati da db... non vorrei che diventasse troppo pesante il tutto.
    ma se io nella mia classe 'interrogazioni' creo il metodo login e dal metodo login setto la classe utenti con i valori trovati quando entro nella mia 'main' questi valori non ci sono più...

    Gazie cmq del vostro aiuto ... molto prezioso... per l'analisi .. devo fare esperienza

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.