Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    323

    Consiglio codice php scritto con OOP

    Ciao a tutti volevo chiedere ai più esperti nella OOP dato che mi ci sono avvicinato solo da poco, se un codice come questo fosse strutturato bene, o se si potesse migliorare , se pur al momento non faccia nulla di essenziale preferisco consolidare le basi.
    Codice PHP:
    <?php  
    class Reindirizzamento{
    public static 
    $action;    
    public function 
    __construct($action){  
    //Inizio controllo  
    $action stripslashes($action);  
    $action mysql_real_escape_string($action);  
    $action htmlentities($action);  
    $this->action $action;  //Fine controllo  
    }//Fine metodo costruttore    
    public function Href($action){  
    if(
    $this->action == "home"){  
    //Reindirizzo alla home  
    }else if($this->action == "Registration"){
    //Reinderizzo alla registrazione  
    }else{  
    //Reinderizzo a login  
    }    
    }
    //Fine funzione Href    
    }//Fine classe    
    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    323
    Up

  3. #3
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    inserisci una descrizione di cosa si deve occupare esattamente questa classe ed un esempio di utilizzo.

    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    323
    Questa classe ha il copito di ricevere un dato, ed in base a questo dato deve reindirizzare la pagina, una classe abbastanza importante in quanto molte sezioni del sito richiedono questo intervento...

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Io non sono un esperto ma...

    Codice PHP:
    <?php
    //************** CIO' CHE RIUSI ********************
        //Punto primo --> Definire l'inerfaccia di un ipotetico tipo reindirizzamento
        
    abstract class aRedirect{
            
    //Associare un url (string) ad un caso (string)
            
    public function AddLocation($url,$case);
            
    //Valutato il caso provoca il redirect all'url
            
    public function Redirect($case);
        }

        
    //Punto secondo --> Realizziamo un tipo redirect concreto ma riusabile basato
        //                  su header()
        
    class cHeaderRedirect extends aRedirect{
            private 
    $redirect=array();

            public function 
    AddLocation($url,$case){
                
    $this->redirect[$event]=urlencode($url);
            }

            public function 
    Redirect($case){
                if(isset (
    $this->redirect[$case])){
                    
    header("Loction: {$this->redirect[$case]}");
                    exit;
                }else
                    return 
    false;
            }
        }

        
    //Punto terzo --> Definiamo un ipotetico tipo che ralizzi il redirect
        
    abstract class aRedirector{
            
    //Impedisco che vengano create istanze delle sottoclassi di questa calsse
            
    private function __construct(){}
            public static function 
    RedirectOn($event);
        }
    //******************* FINE DI CIO' CHE RIUSI ***********************

    //Questo è un esempio di implementazione per la tua applicazione specifica
    class LogInRedirector extends aRedirector{
        const 
    kHome="home";
        const 
    kLogIn="log in";
        const 
    kRegistration="registration";

        public static function 
    RedirectOn($event){
            
    $product=new cHeaderRedirect();// o una qualunque classe estenda aRedirect
            
    $product->AddLocation("index.php"self::kHome);
            
    $product->AddLocation("login.php"self::kLogIn);
            
    $product->AddLocation("register.php"self::kRegistration);        
       
            return 
    $product->Redirect($event);
        }
    }

    //Questo è un altro esempio di implementazione per la tua applicazione specifica
    class ErrorRedirector extends aRedirector{
         public static function 
    RedirectOn($event){
            
    $product=new cHeaderRedirect();// o una qualunque classe estenda aRedirect
            
    $product->AddLocation("error.php""error");

            return 
    $product->Redirect("error");
        }
    }

    //Esempio di utilizzo
    //vedi tu da dove catturare $event, il così detto evento, che sarà una stringa
    LogInRedirector::RedirectOn($event) or ErrorRedirector::RedirectOn($event) or die("sono nei guai!");
    ?>
    C'è di meglio in giro, ma cosa ho fatto?
    Ho ipotizzato un generico tipo redirect, tramite classe astratta aRedirect, da cui discende la classe concreta che implementa la classe astratta tramite header().
    Ho quindi ipotizzato un generico tipo Redirector,tramite classe astratta aRedirector, da cui possono discendere varie implementazioni specifiche di redirector.

    In questo modo ogni elemento è indipendente dall'altro ovvero i tuoi script possono utilizzare indifferentemente qualcunque calsse estenda (implementi l'interfaccia dichiarate nella classe astratta) aRedirector. Dal canto loro i Redirector concreti, sottoclassi di aRedirector possono implementare come meglio credono la ridirezione utilizzando una delle sottoclassi concrete della classe astratta aRedirect.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    323
    grazie mille del chiaro esempio di script,ma quindi il mio era strutturato tutto male ?

  7. #7
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Nei commenti le cose che certamente non vanno bene nel tuo scritp
    Codice PHP:
    <?php   
    class Reindirizzamento
        
    //una classe non dovrebbe mai esporre i propri dati poichè sono il suo stato,
        //stato che andrebbe modificato solo attraverso l'interfaccia, o tipo, della
        //classe ovvero attraverso i metodi o richieste cui l'oggetto risponde
        
    public static $action;     
        public function 
    __construct($action){   
            
    //a che serve togliere gli slash e poi rimetterli con la funzione di
            //mysql, che in via opzionale richiede una connessione DB?
            
    $action stripslashes($action);   
            
    $action mysql_real_escape_string($action);   
            
    //Ciò che deve essere html lo trsformi con htmlentities, ciò
            //che deve essere url utilizza urlencode
            
    $action htmlentities($action);   
            
    $this->action $action;  
        } 
        
    //A che serve $action qui se poi utilizzi $this->action?
        
    public function Href($action){   
            
    //queste stringhe ti obbligano a riscrivere la classe se vuoi modificare
            //il comportamento della classe
            
    if($this->action == "home"){   
                 
    //Reindirizzo alla home   
            
    }else if($this->action == "Registration"){ 
                
    //Reinderizzo alla registrazione   
            
    }else{   
               
    //Reinderizzo a login   
            
    }     
        }   
    }     
    ?>
    Complesivamente, per quel che hai scritto perchè creare un oggetto quando puoi definire il metodo href come static, eliminare variabile della classe $action, ed eliminare il costruttore?

    Ma se fai questo tanto vale creare una semplice funzione!

    Se stai iniziando, poniti come primo obiettivo di utilizzare solo variabili private nelle tue classi. E' già un buon modo per iniziare ad incapsulare i dati e pensa bene alla definizione dell'interfaccia della classe ovvero ai metodi che la classe mette a disposizione di chi la utilizza.
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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.