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

    Classe con funzione Private

    ciao ragazzi,, ho un problema,, che tenterò di spiegarvi riproponendo il problema con un esempio Facile...

    ho la classe Verifica_testo
    codice:
    class Verifica_Testo{
    
    public $testo;  // conterrà il testo da analizzare
    public $numcaratteri;  // conterrà il numero di caratteri 
    public $errore;  // conterrà l' errore se ci sarà
    
    .............
    
    }

    dentro la classe ci sono 2 funzioni, una Publica cvhe verrà richiamata, e una Privata di cui si servela funzione pubblica

    codice:
    private Conta_Caratteri(){
    
         // Conto i caratteri e popola la variabile della classe
         $this->numcaratteri = strlen($this->testo);
    
    }
    
    
    public Verifica_Errori(){
    
         // Richiamo la funzione conta caratteri
         $this-> Conta_Caratteri();
    
    
         // Verifico se ci sono errori e popolo la variabile se ci sono
    
         $this->errore = ($this->numcaratteri < 20) ? "Testo Troppo Corto" : "";
    
    }
    ora succede che dichiaro la classe e popola la variabile testo e cerco di verificare il tutto

    codice:
    $classe = new Verifica_Testo();
    $classe->Testo = " questo è il testo da Verificare";
    $classe->Verifica_Errori();
    succede che la funzione Verifica_Errori() non funziona bene, perchè la funzioe al suo interno Conta_Caratteri non agisce sulle variabili impostate dentro la classe,, quindi per lei $this->testo è SEMPRE VUOTA.

    mi sembra strano che si comporti cosi, magari mi sfugge un imposrazione che permetta di usare questo metodo...

    ripeto questo e un esempio semplice, ho una classe ben piu articolata che segue questa logica...



    grazie mille so che mi sarete d' aiuto

  2. #2

    Re: Classe con funzione Private

    Originariamente inviato da BOES
    ciao ragazzi,, ho un problema,, che tenterò di spiegarvi riproponendo il problema con un esempio Facile...

    ho la classe Verifica_testo
    codice:
    class Verifica_Testo{
    
    public $testo;  // conterrà il testo da analizzare
    public $numcaratteri;  // conterrà il numero di caratteri 
    public $errore;  // conterrà l' errore se ci sarà
    
    .............
    
    }

    dentro la classe ci sono 2 funzioni, una Publica cvhe verrà richiamata, e una Privata di cui si servela funzione pubblica

    codice:
    private Conta_Caratteri(){
    
         // Conto i caratteri e popola la variabile della classe
         $this->numcaratteri = strlen($this->testo);
    
    }
    
    
    public Verifica_Errori(){
    
         // Richiamo la funzione conta caratteri
         $this-> Conta_Caratteri();
    
    
         // Verifico se ci sono errori e popolo la variabile se ci sono
    
         $this->errore = ($this->numcaratteri < 20) ? "Testo Troppo Corto" : "";
    
    }
    ora succede che dichiaro la classe e popola la variabile testo e cerco di verificare il tutto

    codice:
    $classe = new Verifica_Testo();
    $classe->Testo = " questo è il testo da Verificare";
    $classe->Verifica_Errori();
    succede che la funzione Verifica_Errori() non funziona bene, perchè la funzioe al suo interno Conta_Caratteri non agisce sulle variabili impostate dentro la classe,, quindi per lei $this->testo è SEMPRE VUOTA.

    mi sembra strano che si comporti cosi, magari mi sfugge un imposrazione che permetta di usare questo metodo...

    ripeto questo e un esempio semplice, ho una classe ben piu articolata che segue questa logica...



    grazie mille so che mi sarete d' aiuto
    Forse perchè la variabile $testo ha la t minuscola e NON maiuscola:

    Codice PHP:
    ...
    $classe->Testo " questo è il testo da Verificare";
    ... 

    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    EDIT: scusa satifal, ho visto ora la tua risposta

    Ciao, magari è solo un'errore di copiatura....tu quando istanzi la classe popoli poi una variabile $Testo, mentre nella classe la tua variabile si chiama $testo
    $classe = new Verifica_Testo();
    $classe->Testo = " questo è il testo da Verificare";
    $classe->Verifica_Errori();
    prova a fare $classe->testo = "il tuo testo da verificare"

  4. #4
    Originariamente inviato da albx87
    EDIT: scusa satifal, ho visto ora la tua risposta

    Ciao, magari è solo un'errore di copiatura....tu quando istanzi la classe popoli poi una variabile $Testo, mentre nella classe la tua variabile si chiama $testo


    prova a fare $classe->testo = "il tuo testo da verificare"

    !nono questo e solo un esempio scritto qui, e normale che qualche maiuscola salti..

  5. #5
    Se questo è solo un esempio e nel tuo codice originale maiuscole e minuscole sono rispettate, forse è meglio se posti il tuo codice...magari c'è qualche errore che sfugge

  6. #6
    Originariamente inviato da albx87
    Se questo è solo un esempio e nel tuo codice originale maiuscole e minuscole sono rispettate, forse è meglio se posti il tuo codice...magari c'è qualche errore che sfugge


    ECCO QUI...

    codice:
    //__________VERIFICA TESTO__________//
    
    
    class Verifica_Testo{
    	
    	public $Obbligatorio = TRUE;      // Se il Campo è Obbligatorio o No, di Default è TRUE
    	public $Testo;                    // Il Testo da Verificare
    	public $Errore;                   // La descrizione dell' Errore
    	public $LunghezzaMin;             // Lunghezza di Caratteri Minima
    	public $LunghezzaMax;             // Lunghezza di Caratteri Massima
    	
    	
    	
    	private function Obbligatorio_Lunghezza(){
    		
    		//Verifico se è Obbligatorio
    		if($this->Obbligatorio){
    			if(empty($this->Testo)){
    			    $this->Errore = 'Campo Obbligatorio';
    			    GestoreErrori::$Errore = FALSE;
    			    return FALSE;
    			}
    		}
    		
    		//Verifico La Lunghezza Massima Testo
    		if(!empty($this->LunghezzaMax)){
    		   if(strlen($this->Testo) > $this->LunghezzaMax){
    			   $this->Errore = 'Testo Troppo Lungo, Massimo '.$this->LunghezzaMax.' Caratteri';
    			   GestoreErrori::$Errore = FALSE;
    			   return FALSE;
    		   }
    		}
    		
    	    //Verifico La Lunghezza Minima Testo
    		if(!empty($this->LunghezzaMin)){
    		   if(strlen($this->Testo) < $this->LunghezzaMin){
    			   $this->Errore = 'Testo Troppo Corto, Minimo '.$this->LunghezzaMin.' Caratteri';
    			   GestoreErrori::$Errore = FALSE;
    			   return FALSE;
    		   }
    		}
    		
    		return TRUE;
    	}
    	
    	
    	
    	public function Verifica_Username(){
    		
    		//Verifico L' Obbligatorietà e la Lunghezza
    		if(!$this->Obbligatorio_Lunghezza()){
    			GestoreErrori::$Errore = FALSE;
    			return;				
    		}
    		
    		// L' Username puo contenere soltanto Lettere Numeri Trattini e Tratini Bassi
    		if(!preg_match('/^[a-z0-9-_]{0,}$/i', $this->Testo)){
    			$this->Errore = 'Formato Errato';
    			GestoreErrori::$Errore = FALSE;
    			return;			
    		}
    				
    	}
    	
    	
    	public function Verifica_Email(){
    		
    		//Verifico L' Obbligatorietà e la Lunghezza
    		if(!$this->Obbligatorio_Lunghezza()){
    			GestoreErrori::$Errore = FALSE;
    			return;				
    		}
    		
    		//Verifico la Email
            if(!filter_var($this->Testo, FILTER_VALIDATE_EMAIL)){
            	$this->Errore = 'Inserisci una Email Corretta';
    			GestoreErrori::$Errore = FALSE;
    			return;	
            }
    				
    	}
    	
    	
    	public function Verifica_Link(){
    		
    		//Verifico L' Obbligatorietà e la Lunghezza
    		if(!$this->Obbligatorio_Lunghezza()){
    			GestoreErrori::$Errore = FALSE;
    			return;				
    		}
    		
    		// L' Username puo contenere soltanto Lettere Numeri Trattini e Tratini Bassi
    		if(!preg_match('/^(http:\/\/)+[a-z0-9\-\.]+\.[a-z]{2,4}$/', $this->Testo)){
    			$this->Errore = 'Formato Errato';
    			GestoreErrori::$Errore = FALSE;
    			return;			
    		}
    				
    	}
    
    
    	public function Verifica_Testo(){
    		
    		//Verifico L' Obbligatorietà e la Lunghezza
    		if(!$this->Obbligatorio_Lunghezza()){
    			GestoreErrori::$Errore = FALSE;
    			return;				
    		}
    		
    				
    	}
    		
    }

  7. #7
    Originariamente inviato da BOES
    !nono questo e solo un esempio scritto qui, e normale che qualche maiuscola salti..
    Io non credo, dato che facendo copia/incolla del tuo codice e correggendo l'errore della T maiuscola la variabile $testo è correttamente valorizzata e visibile sia all'interno del metodo Verifica_Errori() che Conta_Caratteri()
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Perchè alla funzione Obbligatorio_Lunghezza passi una variabile $Testo che poi non usi?! (visto che nella funzione richiami sempre $this->Testo)

  9. #9
    Originariamente inviato da albx87
    Perchè alla funzione Obbligatorio_Lunghezza passi una variabile $Testo che poi non usi?! (visto che nella funzione richiami sempre $this->Testo)
    nono sto facendo arie prove, quella variabile li nn ce

  10. #10
    Mmm....comincia a mettere qualche echo della variabile $this->Testo prima di ogni controllo che fai...così vedi come è valorizzata e se è valorizzata.

    Altra cosa (lo so sono un rompiscatole ) perchè richiami $Errore così:
    GestoreErrori::$Errore = FALSE;
    $Errore non è dichiarata come static, per usarla devi fare $this->Errore....

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.