Metodi static e passaggio di variabili

MarcoGrazia

Utente Attivo
15 Dic 2009
853
21
28
63
Udine
www.stilisticamente.com
Ciao.

Sto modificando una vecchia classe realizzata da me a suo tempo, che funzionava benissimo. ( E perché l'hai modificata? Sperimentare sempre )

Dunque, ho iniziato a modificare tutti i suoi metodi per portarli a statici, niente di che in realtà, sono solo due, quindi detto fatto, e sono inizati i problemi.

All'interno del primo metodo getDomanda() interagisco con un array di domande, implementato come privato.

All'inizio usavo correttamente $this all'interno del metodo, ma passando a private ha iniziato a darmi un errore.
Il metodo era richiamato con il classico $oggetto = new classe(); $oggetto->getDomanda(); ma passando a static ho iniziato a usare Classe::getDomanda(); ed è subito comparso l'errore: Uncaught Error: Using $this when not in object context in...

Così l'ho modificato da $this->domanda a self::domanda e pensavo di essere riuscito a risolvere il problema, ma nulla, è solo cambiato il messaggio di errore, da quello di prima a questo Uncaught Error: Undefined class constant 'domanda' in... ma domanda è un array private in cima alla classe.
Francamente non so risolvere il proble al momento.

Vi metto un po' di codice sperando di avere un aiuto da parte vostra.
PHP:
class Captcha implements iCaptcha
{
    private static $domanda = [
        'it' => [
            'qual è il colore del limone?',
            'qual è il colore dell\'arancia?',
        ],
        'en' => [
            'what is the color of lemon?',
            'what is the color of orange fruit?',
        ]
   ];

  
   private $risposta = [
        'it' => [
            'giallo',
            'arancione',
       ],
        'en' => [
            'yellow',
            'orange',
       ]
    ]

 
    public static function getDomanda( string $lingua) {
        $conto = count( self::domanda[$lingua] ) - 1;  //  Punto in cui va in errore
        $chiave = mt_rand( 0, $conto );
        return $this->domanda[$lingua][$chiave] . '§' . $this->risposta[$lingua][$chiave];
    }
  
// ........ c'è pure una getRisposta() ma per ora non serve dato che usa le stesse variabili, spero che le risposte per la prima valgano anche per la seconda.
}

Richiamando la classe e quindi la funzione con $captcha = Captcha::getDomanda('it'); dovrebbe riportare la domanda e la risposta nella variabile $captcha, ma in realtà dopo la modifica va in errore.

EDIT
Modifica: avevo sbagliato semplicemente dimenticando il dollaro davanti alla variabile dopo il self.
Quindi diventa self::$domanda.

Bene, ora l'errore diventa: Uncaught Error: Access to undeclared static property: Captcha::$domanda... che dovrei risolvere dando lo static anche alle varibabili, vi faccio sapere.
 
Ultima modifica:

Discussioni simili