Newsgroup: it.comp.www.php
Titolo: variabili globali

E' possibile definire una variabile globale in modo che questa sia
accedibile all'interno di una funzione senza dover utilizzare global ?
un po' come $_GET e $_POST
si, è vero, queste sono di sistema, ma mi chiedevo se c'era qualche
scappatoia.
Matteo



No, ma se vuoi fare la bastardata (e subirne le conseguenze) puoi usare 
le superglobals e infilarci un array con le tue variabili globali.
$_POST["§mievar"]["pippo"] = "Pluto";
oppure anche direttamente
$_POST["§pippo"] = "Pluto";
Il § serve solo a pararti leggermente il sedere da variabili che 
potrebbero arrivare dal client.
A tuo rischio e pericolo. Io ti SCONSIGLIO caldamente di usare anche solo 
variabili globali, perche` prima o poi ti fai male. Con questo sistema ti 
farai ancora piu` male.
Uomo avvisato...
Bye.

 scappatoia.
Sono superglobal, non di sistema. Puoi usare un altro array superglobal, come
$_SESSION, compatibilmente con la struttura della tua applicazione.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Instruments register only through things they're designed to register.
Space still contains infinite unknowns.
    --Spock, "The Naked Time"

 Matteo
La funzione define('variable', 'valore') non va bene?
Max
-- 
http://www.maxori.it
L'Arte � la capacit� di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

 La funzione define('variable', 'valore') non va bene?
$ cat costanti.php
<?php
define('a',10);
echo a."\n";
define('a',20);
echo a."\n";
?>
$ php5 costanti.php
10
10
Inoltre sono costanti, con tutto quello che ne va dietro (nessun passaggio 
per riferimento, per esempio).
Bye.

 Matteo
se � una variabile che riguarda un parametro della sessione usa
$_SESSION altrimenti non usare variabili globali ma passa semplicemente
alla funzione il valore che ti interessa.
per quale ragione devi accedere a variabili globali?

 scappatoia.
S�, le possibilit� che hai non 2-3:
- le dichiarazioni delle costanti (di cui ti hanno gi� detto le
limitazioni...)
- l'utilizzo dell'array superglobale $GLOBALS che ti evita di scrivere il
tanto "odiato" global (<-- che probabilmente � la soluzione che cerchi)
- ed infine invece di usare funzioni e una programmazione procedurale,
adottare un approggio orientato agli oggetti


$t è un oggetto e deve essere visibile in molti metodi di quasi tutti
gli altri oggetti
soluzioni adottate:
nel main:
global $t;
$t=new T();
nei metodi grandi (che fanno ampio uso di $t) uso global $t; $t->metodo
();
nei metodi piccoli (molti metodi hanno una o poco più righe di
codice): T::_()->metodo() o T::metodo()
in cui
class T {
  function _(){ global $t;return $t; }
  function metodo(){
    if(!isset($this)){
     global $t;return $t->metodo();
     return "ciao";
    }
  }
}
_() a volte la chiamo get()
il sistema T::metodo() ha il difetto di non potersi mettere dentro le
{}
echo "metodo restituisce {T::metodo()}"; // invalida!
mentre $t si
echo "metodo restituisce {$t->metodo()}"; //valida
ma avrei preferito rendere superglobale $t
Ciao
Matteo

 Per *NESSUNA* ragione. Tranne quella di non saper programmare.
Perch�, scusa?
A volte, le globali fanno comodo.
Alla fin fine, salvarsi le configurazioni nella sessione o
salvarse le configurazioni in un array globale, cambia poco.

 qualsiasi punto della propria vita, dai 12 anni in poi.
Quando avevo 14 anni i computer che potevano permettersi i quattordicenni
avevano SOLAMENTE variabili globali!
Quando avevo 12 anni c'erano solamente le TI programmabili. :)
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
E` da maleducati scrivere e-mail con bocca piena.

 configurazioni in un array globale, cambia poco.
Se in mezzo a diverse righe di codice vedi
$_SESSION["a"] = "pippo";
e` piu` chiaro che stai accedendo a una variabile "globale" rispetto a un
golbal $a;
... 100 righe di codice...
$a = "pippo";
Stessa cosa con un singleton, per quanto sia molto simile a una variabile 
globale, devi comunque scrivere
$global = Global::getInstance();
... 100 righe di codice ...
$global->a = "pippo"
In generale le global sono il male (cosi` come i singleton e, se non stai 
attento, anche le sessioni) perche` in un certo punto del programma non 
sai che valore stanno assumendo con certezza. Perdi la localita` dei dati.
Se passi una variabile a una funzione sai che all'inizio della funzione 
aveva quel valore e ce l'avra` anche quando la usi. Se usi una global, 
qualsiasi funzione usi tra l'inizio della tua funzione e l'uso della 
variabile puo` modificare quel valore in modi che non conosci (puo` anche 
trasformarla da un intero a un oggetto PDO, per dire).
function faccioio()
{
 global $a
 $a = rand();
}
function faccioqualcosa()
{
  faccioio();
}
function quellagiusta()
{
 global $a;
 $a = 10;
 faccioqualcosa();
 print $a;
}
quellagiusta();
Guardando solo quellagiusta() non hai idea di cosa stampi, o meglio, pensi 
che stampi 10. Magari faccioio() e` definita in un file incluso per 
sbaglio. Devi fare un backtrace a mano per vedere cosa succede alla tua 
variabile.
Bye.