Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    142

    Variabile globale in una classe

    Ciao a tutti,
    vi illustro lo scenario:

    Ho una classe con all'interno alcune funzioni, quello che vorrei è recuperare il valore di una variabile impostato in una funzione ed utilizzarlo in un'altra funzione, ho agito in questo modo:

    Codice PHP:
    class PROVA(){
     public 
    $variabile_globale;

     function 
    A(){
      
    $this->variabile_globale='VALORE';
     }

     function 
    B(){
      echo 
    $this->variabile_globale;
     }

    quello che mi stampa è un valore vuoto, facendo echo di $this->variabile_globale, subito dopo la valorizzazione (function A), il valore viene stampato, ma non lo vedo in function B.
    Come faccio a prendermi il valore definito in function A? Grazie.

  2. #2
    A me funziona perfettamente;:

    Codice PHP:
    class PROVA
    {
        public 
    $variabile_globale;
     
        function 
    A()
        {
            
    $this->variabile_globale 'VALORE';
        }
     
        function 
    B()
        {
            echo 
    $this->variabile_globale;
        }
    }
     
    $prova = new PROVA();
    $prova->A();
    $prova->B(); // VALORE 

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    142
    A me non serve al di fuori della classe, ma devo utilizzarla all'interno della funzione B:
    in A la valorizzo
    in B la uso

  4. #4
    Mah, hai provato ad eseguire il codice che ho postato così come l'ho postato.

    Come vedi commentato sull'ultima riga, la chiamata al metodo B() restituisce VALORE ovvero quanto impostato in A()....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    142
    Non dubito che funzioni, ma non volevo eseguire la function A per ottenere il valore della mia variabile (a questo punto non so se sia possibile), questo perchè in A ci sono altre operazioni che non gestisco io e quindi quella funzione viene richiamata da altre. Dato che a me serve una variabile che viene valorizzata in A, pensavo di usare una variabile globale in cui viene memorizzato quel valore (globale perchè dovrebbe essere visibile ovunque all'interno della classe), in modo da poterla poi usare in un'altra funzione (nell'esempio, funzione B).
    Quindi non posso eseguire la funzione A per prendere quel valore, anche perché ha un valore di ritorno che non è la mia variabile.

  6. #6
    Primo, una variabile globale è una cosa diversa da una proprietà pubblica:

    https://www.php.net/manual/en/reserv...es.globals.php
    https://www.php.net/manual/en/langua...properties.php

    > perchè in A ci sono altre operazioni che non gestisco io

    Che cosa significa "non gestisco io"?

    La classe viene istanziata una volta sola?
    Tu operi sulla stessa istanza su cui è stato chiamato il metodo A() in precedenza?
    Non puoi semplicemente estrarre il codice che valorizza il valore che ti serve e metterlo in un metodo ad-hoc?

    Usare variabili globali (quelle vere) in una classe è una pessima idea.



  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    142
    Scusami, rispondo solo ora perché ho dovuto ricreare tutto il giro che fa questa classe. Da qui la mia frase "non la gestisco io", nel senso che non l'ho creata io, l'ho "ereditata". Ho usato impropriamente il termine "varibile globale", in realtà è una varibile pubblica. La classe viene istanziata in un altro file, all'interno del quale chiama function A passandogli dei valori, questi vengono passati alla chiamata di un'altra funzione C (a sua volta ne chiama altre sempre della classe). Io agisco in altra funzione B che non riceve i valori di origine, ho la necessità di recuperare quei dati per portarli qui.
    in sintesi:

    file 1:
    codice:
    $focus = new PROVA();
    $focus->A($valori);


    file 2 (quello della classe):
    codice:
    class PROVA(){
     public $variabile_globale;
    
     function A($valori){
      //$valori contiene quello che a me serve e vorrei utilizzarli in B
      $this->variabile_globale=$valori;
      $this->C($valori);
     }
    
     function B(){
      ...
       //è qui che a me serve, dove non viene passato $valori e viene  richiamata da altra funzione e si occupa di fare altre operazioni
      echo $this->variabile_globale; 
     }
    
    function C($valori){
      ...
     
     }
    }  

    Spero di essere stato un po' più chiaro. Come posso fare?
    Ultima modifica di fablan; 15-09-2022 a 18:58

  8. #8
    Riproviamoci: tu operi sulla stessa istanza su cui è stato chiamato il metodo A() in precedenza?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    142
    Pensavo di essere stato chiaro sul giro. Si, opero sulla stessa istanza

  10. #10
    Quote Originariamente inviata da fablan Visualizza il messaggio
    Pensavo di essere stato chiaro sul giro. Si, opero sulla stessa istanza
    Se fosse così, il codice d'esempio che ho postato in precedenza dovrebbe funzionare perfettamente.

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.