Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    [IDEA] Alternativa a global e $GLOBALS

    Spesso ho la necessità di utilizzare variabili SUPERGLOBALI per i miei script.
    Per risolvere questo problema il PHP offre nativamente $GLOBALS e global.
    Il primo è deprecato oltre al fatto che la direttiva register_globals di default è impostata su OFF in tutte le versioni di PHP successive alla 4.2.0.
    Il secondo invece è un metodo abbastanza scomodo...

    Ho pensato, quindi, di adottare uno stratagemma sfruttando la supeglobalità delle costanti.
    L'idea è molto semplice: serializzare le variabili dentro una costante che sarà quindi disponibile ovunque.

    ecco il codice:

    Codice PHP:
    function GL_exist(){
         
         
    $a 0;
         
         while( 
    defined('_zzz_'.($a+1)) ){
         
                
    $a++;
         
         }

         return 
    $a;

    }


    function 
    GL_set($arr_var){
        
        
    $a GL_exist();
        
        if( 
    defined('_zzz_0') ){
        
             
    $memo unserialize(constant("_zzz_$a"));
        
             foreach(
    $arr_var as $k => $val$memo[$k] = $val;
        
             
    define('_zzz_'.($a+1),serialize($memo));
        
        }else{
        
             
    define('_zzz_0',serialize($arr_var));
        
        }

    }


    function 
    GL_get(){

        
    $a GL_exist();
        
            return 
    unserialize(constant("_zzz_$a"));
        

    che richiamo in questo modo:

    Codice PHP:

    # setto le variabili globali
    $array_z['pron'] = array('mio','tuo','suo');
    GL_set($array_z);
       
    function 
    prova(){
          
          
    #richiamo le variabili globali
          
    $GL GL_get();
          
          
    #corpo della mia funzione
          
    echo $GL['pron'][0];
          
    }
    prova(); # stamperà: mio
       
    #se ho la necessità posso aggiornare il valore delle variabili globali  
    $array_z['pron'] = array('nostro','vostro','loro');
    GL_set($array_z);
       
    function 
    prova2(){
            
            
    $GL GL_get();
            echo 
    $GL['pron'][0];
    }
       
    prova2(); # stamperà: nostro 
    Ecco come funziona: con GL_set() memorizzo le mie variabili che leggo tramite GL_get().

    Per avere disponibili all'interno della mia funzione tutte le variabili globali mi basta richiamare la funzione GL_get().


    LIMITI:
    Il principale limite di questo metodo sta nell'impossibilità di poter ridefinire o distruggere una costante e ciò implica di dover eseguire il controllo GL_exist() ed una maggior spreco di memoria a causa delle costanti già definite e che non riutilizzo.
    Inoltre ciò obbliga a dover utilizzare una funzione per leggere la mia costante.

    Mi farebbe piacere sapere cosa ne pensate, soprattutto i GURU di questo forum che sanno vedere lì dove io non riesco.... (mamma mia che frase )
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  2. #2
    Forse non ho ben capito, ma...
    Usare le sessioni ti fa tanto schifo?

  3. #3

    Re: [IDEA] Alternativa a global e $GLOBALS

    Originariamente inviato da gasmor
    Spesso ho la necessità di utilizzare variabili SUPERGLOBALI per i miei script.
    Per risolvere questo problema il PHP offre nativamente $GLOBALS e global.
    Se l'array è superglobale NON serve ne $GLOBALS ne global.

    Originariamente inviato da gasmor
    Il primo è deprecato
    Potresti indicarmi la pagina del manuale dove viene detto ciò?

    Originariamente inviato da gasmor
    oltre al fatto che la direttiva register_globals di default è impostata su OFF in tutte le versioni di PHP successive alla 4.2.0.
    Il manuale sembra pensarla diversamente:

    http://www.php.net/manual/en/reserve...es.globals.php
    $GLOBALS has essentially always been available in PHP.
    Originariamente inviato da gasmor
    Ho pensato, quindi, di adottare uno stratagemma sfruttando la supeglobalità delle costanti.
    L'idea è molto semplice: serializzare le variabili dentro una costante che sarà quindi disponibile ovunque.
    Peccato che così NON sarebbero più variabili ma costanti.

    [cut]

    Originariamente inviato da gasmor
    Per avere disponibili all'interno della mia funzione tutte le variabili globali mi basta richiamare la funzione GL_get().
    A tutti gli altri basta usare $GLOBALS oppure implementare degli script con un po' di logica che eviti l'uso di variabili globali.

  4. #4
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    Re: Re: [IDEA] Alternativa a global e $GLOBALS

    Originariamente inviato da filippo.toso
    Se l'array è superglobale NON serve ne $GLOBALS ne global.
    Come si fa a creare un array superglobale? :master:
    Sarebbe la soluzione dei miei problemi...

    Originariamente inviato da filippo.toso
    Potresti indicarmi la pagina del manuale dove viene detto ciò?
    Il manuale sembra pensarla diversamente:
    http://it.php.net/manual/en/security.globals.php


    Originariamente inviato da filippo.toso
    Peccato che così NON sarebbero più variabili ma costanti.
    Per questo ho creato la funzione GL_set()...
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  5. #5
    Utente di HTML.it L'avatar di brodik
    Registrato dal
    Jan 2009
    Messaggi
    765

    Re: Re: Re: [IDEA] Alternativa a global e $GLOBALS

    Originariamente inviato da gasmor
    Come si fa a creare un array superglobale? :master:
    Sarebbe la soluzione dei miei problemi...
    Superglobals are built-in variables that are always available in all scopes

  6. #6
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    Originariamente inviato da ale152
    Forse non ho ben capito, ma...
    Usare le sessioni ti fa tanto schifo?
    Tempo fa ho letto su questo forum, ma onestamente non ricordo il post, che l'array $_SESSION non è molto sicuro perchè viene memorizzato in un file all'interno del server che potrebbe, quindi, essere letto da chi lo condivide con noi...
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  7. #7
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    Re: Re: Re: Re: [IDEA] Alternativa a global e $GLOBALS

    Originariamente inviato da brodik
    Superglobals are built-in variables that are always available in all scopes
    ma qual'è la procedura per creare un array superglobale?

    Supponiamo, ad esempio, di avere questo array:

    $my_array = array('Fabio','Andrea','Marco');

    come lo rendo superglobale?
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  8. #8
    A tutti gli altri basta usare $GLOBALS oppure implementare degli script con un po' di logica che eviti l'uso di variabili globali.
    e di metodi ce ne sono tanti (register tanto per citare la +
    conosciuta).
    In un FW l'autore a reso globali funzioni solo nello
    scope del chiamante.
    Il succo del discorso è tutto qui.



    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  9. #9
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    Originariamente inviato da whisher
    In un FW l'autore a reso globali funzioni solo nello
    scope del chiamante.
    Potresti farmi un esempio, mi interesserebbe capire meglio?
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  10. #10
    Originariamente inviato da gasmor
    Potresti farmi un esempio, mi interesserebbe capire meglio?
    Non per mancanza di buona
    volontà
    ma farti un esempio è un po
    troppo lunghetta.

    Poi andarti a vedere il codice
    in http://konstrukt.dk/


    se vuoi ti posso passare un semplice
    FW fatto con le mie manine che fa
    + o meno la stessa cosa.
    Si ho copiato ma PP ma per lo
    meno ho capito come ha fatto
    la prima volta che ho visto
    ad esempio url() (in una view)
    che utilizzava un metodo del
    controller sono

    arrossito


    Per essere + chiari

    la globale è accessibile
    solamente nella view
    che può sfruttare metodi
    del controller una meraviglia imho.




    PS

    Ti ho offerto il mio codice
    perchè quello di troelskn
    insomma è veramente tosto
    se era capibile all'inizio
    dello sviluppo adesso
    si insomma non è proprio
    una passeggiata.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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.