Metodi static e passaggio di variabili

MarcoGrazia

Utente Attivo
15 Dic 2009
813
18
18
59
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:

MarcoGrazia

Utente Attivo
15 Dic 2009
813
18
18
59
Udine
www.stilisticamente.com
Esatto ha funzionato.
Quindi quando si vuole usare il Paamayim Nekudotayim, ovvero i due doppi punti :: per richiamare metodi, bisogna far diventare tutto statico.

Ok, imparata la lezione :D
 
Discussioni simili
Autore Titolo Forum Risposte Data
ʟᴜᴋᴇ ɢʟᴀɴᴛᴏɴ Account Privati e Metodi Netflix, Spotify, Dazn DE, Infinity, NowTV, VPN, SMS e tanto altro... Altri Annunci 2
D [PHP] chiamata metodi da una classe PHP 3
L [PHP] Classe che non vede i suoi metodi PHP 3
asevenx [PHP] Dubbio teorico sui metodi e costruttore OOP PHP 1
franco69 [Javascript] dubbi metodi di inserimento codice inline Javascript 2
V Leggere da db e metodi asincroni:vorrei capire jQuery 8
V [PHP] utilizzo di metodi statici in altra classe PHP 5
G E-commerce metodi di pagamento E-Commerce 1
MattBolo Metodi per visualizzare un sito dentro un altro dominio Domini 2
C Problema con i metodi Java 2
L Metodi pagamento iAD apple? Sviluppo app per iOS 0
M Metodi di pagamento per e-commerce E-Commerce 7
K Metodi e classi in obj-c Sviluppo app per iOS 0
A menù espandibile usando js .. e i metodi DOM Javascript 9
M Utilizzo dei metodi PHP 3
WorldWideWeb Chiamare i metodi di un controllo OCX Visual Basic 1
F Nuovi metodi Guadagnare col Sito 0
B Nuovo sito e metodi di pagamento Guadagnare col Sito 5
L metodi visibility e disabled solo per ie? Javascript 2
M non static method cannot be referenced from a static context Java 1
T Campi static del Controller generico si azzerano ad ogni richiesta PHP 3
A [PHP] public static function isEan13 PHP 3
F Errore "Access to undeclared static property" PHP 1
G Google api maps static PHP 2
M Passaggio Valori checbox in textarea Javascript 1
Barierta Testo a comparsa con passaggio del mouse Javascript 17
N Problema passaggio variabili tra pagine PHP 4
P Passaggio id php a javascript PHP 6
M errore dopo passaggio Php 7.2 PHP 6
P Passaggio di parametro al metodo: public void run() Java 3
T script jquery non funziona più dopo il passaggio a MVC jQuery 5
R passaggio variabili tra modulo genitore a figlio jQuery 3
J Passaggio variabile tra 2 file php PHP 15
zorro [PHP] passaggio di variabili PHP 7
Z Passaggio php 5.6 a php 7 PHP 1
B [Visual Basic] Passaggio variabili da un progetto all'altro (Visual Studio 2017 C#/SQL) Visual Basic 0
R [PHP] Testo su immagine al passaggio del mouse PHP 2
andreas88 Problema installazione passaggio 2 Magento Magento 0
gandalf1959 Passaggio da mysql a mysqli PHP 13
C Redirect passaggio a https Web Server 1
K [PHP] Passaggio Variabili Senza Refresh Di Pagina PHP 1
A Problema nel passaggio di una animazione da flash a animate Flash 9
S [HTML] Div visibile o nascosto al passaggio del mouse HTML e CSS 3
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP] Passaggio da webapp online a webapp offline PHP 2
V [Javascript] Passaggio valore da popup a pagina madre Javascript 5
V Passaggio codice html a javascript Javascript 8
G [HTML] Variazione di posizione di un tag <a> a passaggio del mouse di un altro tag <a> HTML e CSS 12
ESABOT Problema passaggio dati tra activity tramite intent Sviluppo app per Android 1
F [ASP] passaggio parametri form metodo post Classic ASP 6

Discussioni simili