Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841

    [php] semplice classe...

    per quanto riguarda la programmazione ad oggetti vengo da c++ e non mi trovo molto a mio agio qui in php...

    potete tirarmi un occhiata a queste 4 righe di codice e dirmi come mai non funzionano??

    questa è la classe...
    codice:
    class testo{
    
            // variabili membro
            public $en;
            public $it;
            
            // funzioni
    	public function print(){
    		$lingua = $_SESSION['lingua_corrente'];
    		if($lingua == 'en')
    			echo $en;
    		else if($lingua == 'it')
    			echo $it;
    		else echo "There is no traslation available for the selected language.";
    	}
    
    }
    e così vorrei usarla
    codice:
    			 	$lingua_usata = new testo(); 
    				$lingua_usata->en = "English";  
    				$lingua_usata->it = "Italiano";
    				$lingua_usata->print();
    praticamente mi serve per semplificare la traduzione in due lingue del mio sito.

    grazie mille

  2. #2
    Ti suggerisco di iniziare studiando le basi della programmazione OO in PHP:

    http://www.php.net/manual/en/language.oop5.basic.php

    In ogni caso, esistono soluzioni molto più performanti e scalabili per l'internazionalizzazione delle applicazioni PHP (es. gettext() etc.)

  3. #3
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da filippo.toso
    Ti suggerisco di iniziare studiando le basi della programmazione OO in PHP:

    http://www.php.net/manual/en/language.oop5.basic.php

    In ogni caso, esistono soluzioni molto più performanti e scalabili per l'internazionalizzazione delle applicazioni PHP (es. gettext() etc.)
    io avevo gia letto quella pagina, ma non dice nulla delle stringhe...
    è che oop in php mi serve solo per questo piccolissima classe e non volevo studiarmi tutto il manuale per riuscire a farlo


    comunque se includo questo:
    codice:
    //classe testo
    class testo{
    
            // variabili membro
            public $en = "There is not an english traslation of this text.";
            public $it = "La versione italiana di questo testo non è disponibile.";
            
            // funzioni
    	public function print(){
    		$lingua = $_SESSION['lingua_corrente'];
    		if($lingua == 'en')
    			echo $this->en;
    		else if($lingua == 'it')
    			echo $this->it;
    		else echo "There is no traslation available for the selected language.";
    	}
    
    }
    dice
    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/mamo139/include/lingua.php on line 24

    dove la line 24 è questa:
    public $en = "There is not an english traslation of this text.";

  4. #4
    Originariamente inviato da mamo139
    io avevo gia letto quella pagina, ma non dice nulla delle stringhe...
    Sarà, però parla di $this ...

    Originariamente inviato da mamo139
    è che oop in php mi serve solo per questo piccolissima classe e non volevo studiarmi tutto il manuale per riuscire a farlo
    Infatti non devi. Sarebbe stato sufficiente leggere quella singola pagina indicata, ma si vede che è veramente uno sforzo troppo grande.

  5. #5
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da filippo.toso
    Sarà, però parla di $this ...



    Infatti non devi. Sarebbe stato sufficiente leggere quella singola pagina indicata, ma si vede che è veramente uno sforzo troppo grande.
    se ti stai riferendo al $this->en, e al $this->it io l'avevo gia letto e gia implementato ma non funzionava...
    infatti nel nuovo esempio postato prima del tuo secondo post il codice è scritto con questa correzione
    ma ancora non va, ho postato l'errore e la riga dell'errore!

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    public function print(){
    Non puoi chiamare una tua funzione "print". I reserved words esistono anche in c++

    Per il resto, non so come vuoi utilizzare questa classe, ma il codice che vedo e' abbastanza insensato.. magari perche` e' fuori dal contesto, boh. Se vuoi davvero usare l'oop, non puoi fare a meno di studiarlo, a prescindere da quanto tu intenda utilizzarlo.

  7. #7
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    Originariamente inviato da bubi1
    Non puoi chiamare una tua funzione "print". I reserved words esistono anche in c++
    non sapevo fosse un reserverd word...
    corretto così, ma l'errore è sempre alla prima riga della classe
    public $en = "There is not an english traslation of this text.";

    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/mamo139/include/lingua.php on line 24

    codice:
    class testo{
    
            // variabili membro
            public $en = "There is not an english traslation of this text.";
            public $it = "La versione italiana di questo testo non è disponibile.";
            
            // funzioni
    	public function stampa(){
    		$lingua = $_SESSION['lingua_corrente'];
    		if($lingua == 'en')
    			echo $this->en;
    		else if($lingua == 'it')
    			echo $this->it;
    		else echo "There is no traslation available for the selected language.";
    	}
    
    }
    Originariamente inviato da bubi1
    Per il resto, non so come vuoi utilizzare questa classe, ma il codice che vedo e' abbastanza insensato.. magari perche` e' fuori dal contesto, boh. Se vuoi davvero usare l'oop, non puoi fare a meno di studiarlo, a prescindere da quanto tu intenda utilizzarlo.
    si, ma per rendere funzionante una classe del genere non credevo ci fosse bisogno di uno studio avanzato...
    allora ho pensato di chiedere una mano qui, visto che sono davvero quattro righe di codice

    comunque provo a spiegarti a cosa serve la classe, e se tu hai un'idea piu comoda per fare la stessa cosa dimmela pure
    voglio tradurre il mio sito in piu lingue, per ora italiano e inglese...

    praticamente per ogni testo creo un oggetto appartenente alla classe testo che sto cercando di definire

    una volta impostata per mezzo di un link la lingua corrente nella sessione $_SESSION['lingua_corrente']; non devo fare controlli if() else if() etc per ogni testo che inserisco ma mi basta richiamare la classe così spero:

    $lingua_usata = new testo();
    $lingua_usata->en = "English";
    $lingua_usata->it = "Italiano";
    $lingua_usata->stampa();

    inoltre, nel caso non ci sia una lingua la ignoro e autmaticamente mi segnala in quella lingua che non c'è il testo tradotto.

    insomma grazie a quella classe il codice scritto in tutto il sito si dovrebbe semplificare e accorciare per quanto riguarda la traduzione in varie lingue...
    spero di essermi spiegato bene, vado di fretta e ho scritto veloce!

  8. #8
    Stai usando PHP 4 mentre la sintassi del tuo codice richiede PHP 5 ...

  9. #9
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    corretto così, ma l'errore è sempre alla prima riga della classe
    public $en = "There is not an english traslation of this text.";

    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/mamo139/include/lingua.php on line 24
    Sicuro che fai girare il tutto su php5 e non php4? In php5 il codice postato e' semanticamente corretto, quindi se usi php5 e vedi quel errore, la riga non e' quella indicata.

    Per quanto riguarda il resto, l'idea mi pare giusta, ma ripeto: senza conoscenze e bisogno reale, non serve usare l'oop.

    Nel tuo caso, ipoteticamente parlando, potresti fare:

    Codice PHP:
    //se i testi vengono presi dal db, non ha senso dichiararli entrambi, 
    //per non occupare memoria, dichiari solo quello che ti serve.
    $testo_it'il mio testo in italiano';
    $testo_en 'il mio testo inglese';
    //mi aspetto solo it e en, i sanity check dovrei farli prima, quando
    //imposto la sessione. 
    echo $testo_.$_SESSION['lingua_corrente']; 
    senza aver bisogno di oop, e sicuramente guadagnando in performance.
    (ovviamente questo di sopra e' un codice finto che non funzionera' mai, era solo per dare un idea)

  10. #10
    Utente di HTML.it L'avatar di mamo139
    Registrato dal
    May 2005
    residenza
    Londra
    Messaggi
    841
    ok, ho attivato il supporto a php5 e il codice che avevo scritto funziona

    a cosa è dovuto questo?? su php4 non esisteva la programmazione ad oggetti oppure hanno cambiato la sintassi??

    grazie

    Nel tuo caso, ipoteticamente parlando, potresti fare:

    Codice PHP:
    //se i testi vengono presi dal db, non ha senso dichiararli entrambi, 
    //per non occupare memoria, dichiari solo quello che ti serve.
    $testo_it'il mio testo in italiano';
    $testo_en 'il mio testo inglese';
    //mi aspetto solo it e en, i sanity check dovrei farli prima, quando
    //imposto la sessione. 
    echo $testo_.$_SESSION['lingua_corrente']; 
    senza aver bisogno di oop, e sicuramente guadagnando in performance.
    (ovviamente questo di sopra e' un codice finto che non funzionera' mai, era solo per dare un idea)
    eh ma il tuo esempio non gestisce automaticamente la possibile assenza di una lingua...

    alla fine con la classe posso mettere tutti i controlli e le opzioni che voglio dentro il metodo stampa() e così la gestione diventa il piu facile possibile.
    tanto dovento solo stampare delle stringhe non mi servono performance elevate.
    grazie per l'idea in ogni caso!!

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.