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

    BUG! Variabile globale in una funzione

    Ho beccato uno schifo di BUG senza soluzione.

    In un primo file vuoto creo una funzione per guardare il valore di una variabile globale chiamata $a contenente "PIPPO" dichiarata una riga prima: Nessun problema la funzione mi deve restituire quel valore, e lo fa scrivendomi "PIPPO".

    Ma se...

    In coda ad un altro file con già del codice, provo ad aggiungerci in coda lo stesso IDENTICO codice che ora scriverò in basso ottengo un risultato diverso: La funzione dovrebbe restituirmi "PIPPO", ed invece mi restituisce NULL!

    Il codice è esattamente questo sia nel primo file che nel secondo. Ripeto: É LO STESSO.

    Codice PHP:
    unset($a);
    $a "PIPPO";
    function 
    ciccia()
    {
        global 
    $a;
        echo 
    "In function: ";
        
    var_dump($a);
    }
    echo 
    "Out function: ";
    var_dump($a);
    echo 
    "
    "
    ;
    ciccia(); 
    Risultato razionale del primo file:
    codice:
    Out function: string(5) "PIPPO"
    In function: string(5) "PIPPO"
    Risultato non razionale del secondo file:
    codice:
    Out function: string(5) "PIPPO"
    In function: NULL
    Il codice è lo stesso, per sicurezza in entrambi i casi prima distruggo "$a", e poi la ridichiaro una riga prima di usare la funzione. Eppure questa schifo di funzione in un file funziona e in un altro file no.



    Non vi conviene aiutarmi se avete ancora voglia di dormire nelle prossime settimane.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    prova:

    - a usare $GLOBAL per settare/leggere la variabile e se si presenta lo stesso il problema
    - a eliminare dal secondo file pezzi di codice "un po' alla volta" in modo da isolare il problema

  3. #3
    Senza avere il codice completo del caso che fallisce non saprei come riprodurre questo bug.

  4. #4
    Originariamente inviato da eiyen
    prova:

    - a usare $GLOBAL per settare/leggere la variabile e se si presenta lo stesso il problema
    - a eliminare dal secondo file pezzi di codice "un po' alla volta" in modo da isolare il problema
    Ehi ehi ehi secondo me hai ragione questo sì che potrebbe funzionare:
    Codice PHP:
    unset($a);
    $a "PIPPO";
    function 
    foo()
    {
        echo 
    "In function: ";
        
    var_dump$GLOBALS["a"] );
    }
    echo 
    "Out function: ";
    var_dump($a);
    echo 
    "
    "
    ;
    foo(); 
    Ed invece no!
    codice:
    Out function: string(5) "PIPPO"
    In function:
    Notice: Undefined index: a in genoveffo.php on line 666
    NULL
    Ad un certo punto basta, sto ciccione si prende una pausa e non mi registra più le variabili come globali. Ora inizio a smontare il programma a blocchi e a vedere cos'è che mi crasha sta registrazione delle variabili globali... Anche perchè mi rifiuto di postarvi mille righe di codice: Le vacanze di Pasqua sono anche per voi, passatela rilassati che è meglio

    Se trovo il BUG prima di scrivere testamento giuro che aggiungerò RISOLTO...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    dicevo così, cmq:

    Codice PHP:
    unset($a); 
    $a "PIPPO"$GLOBALS["a"] = $a// <---- ! 
    function foo() 

        echo 
    "In function: "
        
    var_dump$GLOBALS["a"] ); 

    echo 
    "Out function: "
    var_dump($a); 
    echo 
    "
    "

    foo(); 
    ...fermo restando che a me funziona in entrambi i modi.

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Usa le variabili per riferimento la lascia perdere le globals

    Codice PHP:

    $ciccio 
    "CICCIO" ;

    ciccia($a) ;

    echo 
    $a 


    function 
    ciccia( &$a )
    {
          
    $a "CICCIA" ;


    Pensaci ....

  7. #7
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Originariamente inviato da Reyboz Blog
    Notice: Undefined index: a in genoveffo.php on line 666
    Qualcuno non ce la sta raccontando giusta, hai parlato di si e no 20 righe di codice a hai un notice in linea 666?

    Come ha detto k.b posta l'intero codice per cortesia.

  8. #8
    Vogliate scusarmi! Nella doccia ci ho pensato su ed ho capito cosa sbagliavo...

    Ma prima di svelare l'arcano volevo solo chiarire le idee a __debo che mi ha risposto con:

    Qualcuno non ce la sta raccontando giusta, hai parlato di si e no 20 righe di codice ma hai un notice in linea 666? Come ha detto k.b posta l'intero codice per cortesia.


    Caro __debo, certo che ho parlato di un file di 20 righe di codice, ma se leggevi il mio primo messaggio avresti capito che quel file di 20 righe di cui tu parli era il primo file "pulito" che appunto non mi dava problemi! L'errore arrivava accodando quelle 20 righe di codice funzionanti in un mio secondo file "sporco", con già altro codice (appunto quasi settecento righe), che mi dava in risposta quell'errore a parer mio inspiegabile. Ed in ogni caso, se vi avessi passato il file di 666 righe non sarebbe servito a nulla perchè non stava lì dentro l'errore:

    Il vero entusiasmante motivo per cui non funzionava il codice sul mio secondo file "sporco", è che mi ero scordato che stavo lavorando su un file che... veniva incluso da una funzione! Quindi per forza le mie variabili non erano globali: Semplicemente non stavo lavorando globalmente!

    Capito l'errore ho risolto dando ascolto al bravo eiyen usando:

    Codice PHP:
    $GLOBALS["a"] = "PIPPO";
    function 
    foo() 
    {
        global 
    $a;
        echo 
    "In function: "
        
    var_dump$a ); 

    foo(); 
    Grazie e scusatemi per la mia sbadatezza

    Come promesso, aggiungerò [RISOLTO]!

  9. #9
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Perdonami ma avevo male interpretato il tuo:

    Il codice è esattamente questo sia nel primo file che nel secondo. Ripeto: É LO STESSO.

    Pensavo che avessi accodato 20 + 20 righe :P

    Comunque so benissimo che sto dicendo l'ovvio ma per quale diavolo di motivo devi usare variabili global?

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Ok.. solved, allora... ciaooo!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.