Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1

    [PILLOLA] Come Creare Variabili SUPER GLOBALI

    Il titolo credo sia un po ambizioso per questa pillola, ma poi capirete perché ho dato questo titolo
    Non vi è mai capitato di dover impostare delle variabili in una funzione e poi doverle richiamare in un'altra funzione? Vi è mai capitato di dover passare delle variabili ad un metodo della vostra classe? E magari questa classe richiamava un'altra classe a cui doveva passare questa variabile solo in certi casi? A me si!
    Se gli si passa sempre si rischia un consumo di memoria e di cicli di processore necessari per eseguire controlli che si riveleranno inutili dopo che leggerete questa mini pillola!
    Seguendo le indicazioni di questa mini-pillola sarete in grado di poter richiamare qualsiasi variabile in qualsiasi punto del vostro script senza aver bisogno di usare global, passarlo come parametro o altro ancora di complesso!
    Proprio cosi! Mi sono trovato nella situazione di dover passare delle variabili ad una funzione, e questa funzione richiamava un'altra funzione. Quest'ultima funzione a volte ha bisogno di questo parametro altre volte no, cosi perché passare dei parametri opzionali e fare altri ghirigori e controlli inutili?
    Ecco la soluzione...l'array $GLOBALS!

    In quest'array il PHP, in automatico, imposta per RIFERIMENTO tutte le variabili create nella struttura principale del programma, inoltre questa variabile è SUPERGLOBALE, ovvero disponibile in qualsiasi parte di codice, funzione o metodo che sia! Questo comporta che sfruttando quest'array e le sue proprietà è possibile creare vere e proprie variabili SUPERGLOBALI!

    Provate questo codice:
    codice:
    <?php
    	$test_var = "Contenuto Test";
    	echo "{$test_var}
    ";
    	echo "
    ";
    	echo "{$GLOBALS['test_var']}
    ";
    ?>
    Verrà fuori un risultato perfettamente identico!
    Prima printiamo il contenuto della variabile e poi printiamo il riferimento nell'array $GLOBALS a quella variabile. Essendo per riferimento il risultato sarà sempre uguale anche se cambia il contenuto della variabile $test_var

    Adesso provate
    codice:
    <?php
    	function test_func() {
    		$test_var = "Contenuto Test";
    		echo "\$test_var: {$test_var}
    ";
    	}
    
    	test_func();
    	
    	echo "\$test_var: {$test_var}
    ";
    	echo "
    ";
    	echo "\$GLOBALS['test_var']: {$GLOBALS['test_var']}
    ";
    ?>

    Qui potrete vedere che PHP non inserisce le variabili create nelle funzioni e classi nell'array $GLOBLAS ma soltanto quelle create nella struttura principale della pagina.
    Infatti eseguendo l'echo $GLOBALS['test_var'] della nostra variabile dentro l'array $GLOBALS cedremo che non printa nulla.
    Allora una domanda sorge spontanea: come possiamo sfruttare l'array $GLOBALS al nostro scopo?

    ...

    cosi!

    Provate questa funzione
    codice:
    <?php
    	function test_func() {
    		$test_var = "Contenuto Test";
    		echo "\$test_var: {$test_var}
    ";
    		$GLOBALS['test_var'] = &$test_var;
    	}
    	
    	test_func();
    	
    	echo "\$test_var: {$test_var}
    ";
    	echo "
    ";
    	echo "\$GLOBALS['test_var']: {$GLOBALS['test_var']}
    ";
    ?>
    Qui vedrete che tutti gli echo restituiranno lo stesso contenuto!
    Cosa abbiamo fatto?
    Abbiamo inserito per RIFERIMENTO all'interno dell'array $GLOBALS la nostra variabile! Adesso sfruttando $GLOBALS['test_var'] potremo richiamarla in qualsiasi punto dello script.
    Inoltre questo sistema non consuma memoria, soltanto quella necessaria per creare una chiave in un'array, ovvero quasi nulla. La variabile viene impostata per RIFERIMENTO e di conseguenza il contenuto stesso della variabile non viene clonato!

    Per rendere il codice più comprensibile si può utilizzare questo sistema:
    codice:
    <?php
    
    	// Funzione per inizializzare il nostro contenitore delle variabili superglobali
    	function __init_global_var() {
    	
    		// Inizializza l'array 'private' all'interno della variabile superglobale
    		$GLOBALS['private'] = array();
    
    		// Ritorna SUCCESSO
    		return TRUE;
    	}
    
    	// Setta la variabile
    	function __set_global_var($key, &$value) {
    
    		// Imposta la variabile
    		$GLOBALS['private'][$key] = &$value;
    
    		// Ritorna SUCCESSO
    		return TRUE;
    	}
    
    	// Legge la variabile
    	function __get_global_var($key) {
    
    		// Controlla se la variabile è stata settata
    		if (isset($GLOBALS['private'][$key])) {
    
    			// Ritorna il contenuto della variabile se settato
    			return $GLOBALS['private'][$key];
    		} else {
    
    			// Ritorna Fallimento se la variabile non è settata
    			return FALSE;
    		}
    	}
    
    	// Termina il sistema di variabili globali
    	function __terminate_global_var() {
    
    		// Distrugge il nostro l'array liberando la memoria
    		unset($GLOBALS['private']);
    
    		// Ritorna SUCCESSO
    		return TRUE;
    	}
    ?>
    Questo codice vi permetterà di creare le vostre variabili superglobali senza alcuna difficoltà e con comodità!
    Le funzioni INIT e TERMINATE non sono necessarie ma evitano i E_NOTICE, quindi se vi interessa una programmazione ben strutturata e molto comprensibile usateli

    E' possibile anche creare una classe con poche modifiche!

    Un esempio può essere:
    codice:
    <?php
    	
    	// Include il file delle funzioni
    	require_once('globals_managment.inc.php');
    
    	// Funzione di test
    	function test_func() {
    	
    		// Imposta una variabile
    		__set_global_var('test', 'Contenuto Test');
    	}
    
    	// Inizializza il nostro array
    	__init_global_var();
    
    	// Richiama la funzione
    	test_func();
    	
    	// Printa il contenuto della nostra variabile superglobale
    	echo __get_global_var('test');
    
    	// Termina il sistema svuotando l'array
    	__terminate_global_var();
    ?>
    Effettivamente usando questo non avrete necessità di usare la funzione globals o di ritrovarvi con funzioni che prendono 10 parametri di cui la metà non ha necessità di essere passato per riferimento
    Bhe ho finito la mia mini pillola, spero che vi possa aiutare, a me ha aiutato tantissimo

    ciaooooo

    ------
    PS:
    se trovate ORRORI di ortografia...o frasi che vi sembrano sconnesse...vi chiedo pardon pietà...con l'italiano nn ci vado d'accordo...in caso avvertite che correggo :PPP (già fatto, almeno per alcuni - gm)

  2. #2
    Aggiunta alle pillole nel thread in rilievo
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  3. #3
    Utente bannato
    Registrato dal
    Jan 2002
    Messaggi
    852
    io ho trovato utile usare $GLOBALS[] per le variabili inizializzate nel file global ovvero utilizzate da tutta l'applicazione.



  4. #4
    Originariamente inviato da gm
    Aggiunta alle pillole nel thread in rilievo

  5. #5
    Utente di HTML.it L'avatar di aserena
    Registrato dal
    Feb 2003
    Messaggi
    310
    Bravo daniè... ti meriti una damigiana di nutella :metallica

    Cmq non capisco come mai usi la graffa per contenere le variabili:
    echo "{$test_var}
    ";
    In questo caso metterle o non metterle che differenze fà..?
    ciauzzz
    La (!) è quella roba che in autunno si intristisce... perche': seccano i piselli, migrano gli uccelli, cadono i marroni, e se poi c'è anche la nebbia non si vede più un caXXo!! by Piero.mac @07/05

  6. #6
    Originariamente inviato da aserena
    In questo caso metterle o non metterle che differenze fà..?
    ciauzzz
    Nessuna in quel caso, ma mi sono abituato a metterle anch'io, il codice mi sembra più pulito
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  7. #7
    Originariamente inviato da gm
    Nessuna in quel caso, ma mi sono abituato a metterle anch'io, il codice mi sembra più pulito
    a me sembra piu' pulito
    echo $test_var."
    ";



    cmq, degustibus a parte..

    1 - complimenti, e' molto utile

    2 - voglio un po di nutella che ti ha regalato aserena




    P.S. se ne devi scrivere 2 o 3 come fai ???

    echo "{$la_prima} {$la_seconda} {$la_terza}";

    oppure ....

    echo "{$la_prima $la_seconda $la_terza}";

    :master: ... e lo so, basta porovare .. non c'ho voglia
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    vai daniele un barattolone di nutella te lo merriti.. :metallica
    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  9. #9
    D'accordo per la nutellona... :metallica

    Ma ho una domanda che volevo fare ma che non ho mai osato chiedere:

    Ma fino a quando soppravvivono le var globali? e da chi sono visibili?

    Scusate la mia immensa ignoranza globale

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Originariamente inviato da andr3a
    echo "{$la_prima} {$la_seconda} {$la_terza}";

    oppure ....

    echo "{$la_prima $la_seconda $la_terza}";
    La prima che hai detto
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

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.