Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    [PHP] Struttura a Classi

    Ciao a tutti,
    Ho nuovamente bisogno del vostro aiuto, sto iniziando un nuovo progettino e vorrei standarnizzare delle classi da poi utilizzare ovunque, in modo dell obj è sempre stato un lato oscuro per me e vorre mostrarvi la mia visione per avere suggerimenti e pareri sugli errori.
    Le classi costruite sono povere e praticamente senza nessun metodo perche vorrei crearli steb by step.
    Per ora ho queste due classi :
    codice:
    <?php
    class MysqlClass{
    	// parametri per la connessione al database
    	private $host = "";    
    	private $user = "";         
    	private $pwd = "";
    
    	var $result;
    	var $data; 
              
    	// controllo sulle connessioni attive
    	private $attiva = false;
     
    	// funzione per la connessione a MySQL
    	public function connetti(){
    		if(!$this->attiva){
    			mysql_connect($this->host,$this->user,$this->pwd);
    			mysql_select_db("")or die("cannot select DB");
    		}else{
    			return true;
    		}
        }
    
    	public function disconnetti(){
            if($this->attiva){
                if(mysql_close()){
    				$this->attiva = false;
    				return true;
                }else{
                    return false;
                }
            }
    	}
    
    
    
    
    
    
        /*-------------------ESECUZIONE ED ELABORAZIONE QUERY-------------------------*/
        public function query($sql){
            if(!$this->result = mysql_query($sql)){
                trigger_error('<p align="center">fail query database
    ');
                die (mysql_error().' in :
    '.nl2br($sql));
            }
            else{
                return $this->result;
            }
        }
    
        public function fetch($result){
            return mysql_fetch_array($result);
        }
    
        function rows($result){
            return mysql_num_rows($result);
        } 
        /*-------------------ESECUZIONE ED ELABORAZIONE QUERY-------------------------*/
    }
    E la classe user :

    codice:
     <?php
    class User{
    	public $id;
    	public $nome;
    	public $cognome; 
    	public $codcli; 
    	public $utente; 
    	public $pwd; 
    	public $scadpwd; 
    	public $flgblocco; 
    
    	public function selezione($idtmp){
    
    	     $conn = new MysqlClass();
    	     $conn->connetti();
    		$sql="SELECT * FROM utenticli WHERE utcli_id = ".$idtmp;
    	     $res = $conn->query($sql);
    	     if($conn->rows($res) != 1 ){
    	          return false;
    	     }else{
    			$rkut = $conn->fetch($res);
    			$this->id = $rkut['utcli_id'];
    			$this->nome = $rkut['utcli_nome'];
    			/*public $cognome; 
    			public $codcli; 
    			public $utente; 
    			public $pwd; 
    			public $scadpwd; 
    			public $flgblocco; 			*/
    		}	
         }	
    }  
    ?>
    Innazitutto mi sorge subito un dubbio come vederete all'inteno della classe user per valorizzare tutte le proprietà ho creato l'oggetto connessione e ho fatto la mia interrogazione è una pratica corretta quella che sto utilizzando?
    Per funzionare funziona ma vorrei avere un parere.
    La mia idea iniziare era creare la classe padre connection e poi estendere tutte le varie entita (User, interventi ecc ecc) per ereditare i metodi per l'interrogazione al db ma vedo che anche cosi funziona....
    La mia logica di ragionamento è corretta?
    Datemi un vostro parere vi prego, vorrei evitare di costruire il mondo per poi capire che ho sbagliato una cosa e reiniziare tutto da capo..
    Grazie a tutti per le risposte.
    Che mestiere difficile.....essere da soli ancora di più

  2. #2

    Re: [PHP] Struttura a Classi

    Originariamente inviato da Fractals87
    Innazitutto mi sorge subito un dubbio come vederete all'inteno della classe user per valorizzare tutte le proprietà ho creato l'oggetto connessione e ho fatto la mia interrogazione è una pratica corretta quella che sto utilizzando?
    di solito si usa il pattern singleton per avere una sola istanza del database.. cerca in rete e trovi tantissimo sull'argomento.. Non mi piace il nome MysqlClass non ha molto significato, vedo meglio un databaseClass, omettendo il Class inutile, database lo sai già che è una classe

    Per funzionare funziona ma vorrei avere un parere.
    La mia idea iniziare era creare la classe padre connection e poi estendere tutte le varie entita (User, interventi ecc ecc) per ereditare i metodi per l'interrogazione al db ma vedo che anche cosi funziona....
    La mia logica di ragionamento è corretta?
    Non puoi estendere una classe che non centra niente con il padre.. database -> user non ha senso.. Caso mai User utilizza le funzioni di database quindi meglio come aggregazione:
    Codice PHP:
    // senza singleton
    $db = new database();
    // con singleton
    $db database::getInstance();

    $user = new user$db );
    $user->getName(); 

    Datemi un vostro parere vi prego, vorrei evitare di costruire il mondo per poi capire che ho sbagliato una cosa e reiniziare tutto da capo..
    Grazie a tutti per le risposte.
    gli errori ti servono per crescere... cosa stai cercando di realizzare???
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Io prefersico la versione new database

    la sintassi tipo singleton per ste cose la uso solo quando mi faccio le classi come le chiamo io "pseudostatiche" ossia classi che hanno solo fuzioni al loro interno.
    E' una pratica che uso per non impazzire e tenere differenziate le classi "vere" da quelle "pseudo-statiche".

    Cmq e' un approccio abb normale.

    Io presonalmente inoltre preferisco usare la fetch assoc dei dati sql.. mi tiene gli array con la meta' della dimensione di quelli della fetch array e scorrendo i dati con foreach non mi cambia nulla nei cicli di analisi dati.

    se ho estratto 10000 righe, e le controllo con fetch_array ho [x righe * (num colonne *2)] dati mentre con la fetch assoc ho [x righe * num colonne di dati] .... e questo e' bene

    Il *2 della fetch array dipende dal fatto che ogni colonna e' duplicata, un indice e' l'indice numerico e l'altro indice e' il nome della colonna .... nel 90% dei casi non serve l'indice numerico.

  4. #4
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Non per essere schizzinoso, ma vorrei fare un passo alla volta e direi che i patter sono il passo successivo, anche perchè credetemi non è cosa facile da capire soprattutto all'inizio.
    Il principio però mi sembra simile a quello che uso io, grazie alla variabile $attiva nella classe connection vado a verificare se la connessione è aperta o meno o sbaglio?

    Sotto suggerimenti / intuzioni ho modificato la sintassi nel seguente modo :

    CLASSE USER :

    Codice PHP:
    <?php
    class User{
        public 
    $id;
        public 
    $nome;
        public 
    $cognome
        public 
    $codcli
        public 
    $utente
        public 
    $pwd
        public 
    $scadpwd
        public 
    $flgblocco

        public function 
    selezione($idtmp,$conn){

             
    $sql="SELECT * FROM utenticli WHERE utcli_id = ".$idtmp;
             
    $res $conn->query($sql);
             if(
    $conn->rows($res) != ){
                  return 
    false;
             }else{
                
    $rkut $conn->fetch($res);
                
    $this->id $rkut['utcli_id'];
                
    $this->nome $rkut['utcli_nome'];
                
    $this->cognome$rkut['utcli_cognome']; 
                
    $this->codcli$rkut['utcli_codcli']; 
                
    $this->utente$rkut['utcli_utente']; 
                
    $this->pwd$rkut['utcli_pwd']; 
                
    $this->scadpwd$rkut['utcli_scadpwd']; 
                
    $this->flgblocco$rkut['utcli_flgblocco'];
            }    
         }    
    }  
    ?>
    Porzione di programma

    Codice PHP:
            <?php
                 $conn 
    = new MysqlClass();
                 
    $conn->connetti();

                
    $utconn = new User();
                
    $utconn->selezione($_SESSION['idutente'],$conn);
                echo 
    $utconn->nome;
            
    ?>
    La classe connection è rimasta invariata
    A fronte di quanto elencato fino ad ora la struttura logica è corretta oppure no?


    gli errori ti servono per crescere... cosa stai cercando di realizzare???
    Quello che sto cercando di fare è di riscrivere un programma redatto in maniera procedurale creando tutte le entità in oggetti per facilitarmi il compito.
    E' un'applicazione che gestisce interventi di installazione e manutenzione.

    La mia idea nella costruzione dell'oggetto creare i dei metodi standard che mi restituiscano le porzioni di codice html che più sovente vengono implementate..

    Ad esempio per la classe user intenderei creare un metodo che mi restituisca la select opion,
    la tabella con la lista degli utenti, il metodo che prende in input 2 array (campi), (valore), (chiave), tipo interrogazione e che componga automaticamente la insert o l'update, con il relativo where....
    Secondo voi questo approccio è corretto?
    Che mestiere difficile.....essere da soli ancora di più

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Uhm e' una soluzione come altre, io da questo punto di vista preferisco la visione MCV o MVC qualla Model View Controller. Che ti "obbliga" a tenere serparate le entita (siano esse funzioni classi o dati) in base al contesto.

    Nel tuo caso ti consiglio di fare delle procedure che ti danno dei dati in formato "grezzo" ad esempio un array di interventi. E quindi implementare il codice per convertire la struttura dati in un output html o quello che sia.

    Se ci pensi nel momento in cui vorrai fare delle procedure ajax ti basta aggiungere la procedura per avere i dati in json piuttosto che in html e non devi modificare il codice di base .
    Cosi' hai una coesione minore e un livello di flessibilità maggiore.

    La classe db e' ok.
    aggiungerei una classe per stampare i dati e questa (vista l'architettura che vuoi applicare ) la farei, come dicevo sopra, come classe pseudo statica che contiene solo funzioni.

    Esempio
    Codice PHP:

    class dataPrinter
    {

    public function 
    interventiToHTML$data$opts=false )
    {
    /*codice per convertire i dati in base anche alle opzioni passate se necessarie*/

    }

    /*tutti gli altri metodi pseudo-statici*/


    A questo punto nel tuo script

    Codice PHP:


    //recupera i dati da db come fai sopra anche con il fetch
    $fetchedData $cdb->fetch($data) ; // Mi pare facessi una cosa simile se nn sbaglio

    // Converti i dati
    $html dataPrinter::interventiToHTML($fetchedData) ; 

    Cosi' hai un codice piu' pulito e tieni completamente separata la parte di model da quella di view e nel controller fai tutto.

    Mantieni inoltre un apporccio OOP ma con la stessa felssibilità delle funzioni dove non ti servono per forza classi con attributi etc.....

  6. #6
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Ok ho capito cosa intendi.
    Io gia implemento nella vecchia versione chiamate ajax che mi restituisco direttamente il codice html e la logica applicata è questa

    Pg1.php (chiamata da browser)

    Pg1_code behind.php (pagina chiamata in modalità asincrona che a fronte di un parametro entra in una determinata funzione e restituisce output)

    Secondo la logica che ho costruito nella mia testa poi la struttura dovrebbe essere la seguente :

    Pg1.php (chiamata da browser)

    Pg1_code behind.php (questa pagina invece di fare il lavoro, istanzia le classi necessarie e chiama metodi che poi restituiscono output).

    L'idea di fare dei metodi per ogni cosa era dettata dal fatto che qualsiasi procedura che non fosse una chiamata ad un metodo creare un metodo, in modo che alla fine avrei avuto
    Pg1.php (Pagina html con chiamata a metodi)
    Pg1_code behind.php (Ricettacolo di funzioni, implementazioni classi, che restituivano output)
    : questa pagina in particolar modo aveva solo chiamate a metodi il più possibile

    Pagine "Accessorie" di classi e fuzioni.

    In questo modo avrei potuto compilare tutte le pagine "Accessorie" allo script bcompiler in modo da compilare tutte le classi e funzioni cosi da pert proteggere il codice.....

    Lo so probabilmente sono partito con la quinta marcia su una strada in discesa ma il problema che devo fare per forza questa cosa....
    E menomale che ci siete voi che mi date dei consigli
    Che mestiere difficile.....essere da soli ancora di più

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Uhm......

    Quanto dici mi sa che ti convienre progettarti qualche interfaccia.

    Ossia una classe astratta per gestire il codice.

    Diciamo una interfaccia con un set di medoti

    - 1 controlla dati
    - 2 esegui operazione
    - 3 gestisci output

    questa classe di per se' e' vuota e contiene solo le definizioni dei metodi.
    Poi cosa fai ti fai le tue classi che implementano l'interfaccia inserendo il relatvo codice.
    Cosi'ì strutturi tutto meglio.

    Pensaci.

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    miiiiiixxxxxia sempre piu difficile.....

    Giusto per completezzain una realtà come bene o male ti ho descritto....
    sto costruendo una pagina che implementa un filtro parametrico e uno di questi parametri è appunto una select box di provincie le quali risiedono sul database

    Tu come gestiresti questa cosa?
    Creeresti una classe che restituisca l'array di tutte le province?
    prediporresti una pagina funzioni_province dovo risiede una funzione che restituisce le province?
    oppure nella costruzione della pagina faresti la tua select il tuo while e i tuoi echo "<option>"?

    Poi ti pagherò la consulenza
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Lol si le varie soluzioni sono proprio queste dipenda anche da quanto tempo hai a disposizione.

    CMq io di solito uso una funzione che mi da l'array con tutte le province e poi lo gestisco dove mi serve.

    Ad esempio se hai una select multipla e devi gestire piu' selezioni ? Devi fare piu' funzioni?
    io spezzo tutto faccio 1 funzione per recuperare le prov ( che riuso ovunque ) e poi ho una procedura di creazione / gestione select

    mi sono fatto tutta una classe per gestire i forms e la generazione dei campi in ogni maniera possibile ho i metodi specifici per ogni tipo di elemento cosi' quando creo il form ho una classe per gestire la creazione dei forms... ma questa e' una cosa mia dal canto tuo potresti implementare sempre quelle classi pseuso-statiche che sono la salvezza :

    Codice PHP:

    class formGenerator()
    {

    public function 
    creaSelect$data $opts )
    {

    //gestisci opzioni e dati e restituisci html 
    // tra le opzioni puoi mettere anche il campo selectedVals un array con i valori da tenere selected

    }




    Fai quindi dei motodi pseudo-statici per gestire ogni elemento dei form e quindi inizialmente ci metti un po' ma poi ogni form ha un generatore standard che puoi riutilizzare ovunque

    nel tuo script / classe

    1- includi le risorse
    2- avvi le funzioni
    3- stampi output

    cosi' mantieni il codice bello pulito e gestirlo poi sai a priori come e' fatto in quanto applichi uno standard di implementazione per il tuo sistema.


    edit:

    esempio di ccreazioine select da classe proposta
    Codice PHP:


    $prov 
    caricaProvincie();
    $select formGenerator::creaSelect$prov , array(/*eventuali opzioni*/) ) 

  10. #10
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Fiiiiiiiiiiiiico era proprio quello a cui avevo pensato pero non ho mai messo in piedi perchè ho sempre pensato ci volesse una vera eternità.

    Be dai adesso non ti scasso più ti ringrazio infinitamente delle tue risposte, e inoltre spero siccome è una discussione che appare spesso in html.it sia di aiuto a tt le altre persone nella mia situazione..

    Grazie e ciao ciao
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.