Newsgroup: it.comp.www.php
Titolo: Disattivare "global"

Domanda: esiste qualcosa che nel codice mi permette di disabilitare la
direttiva "global"?
Giusto perchè sto includendo un file php all'interno di un CMS (Typo3)
e la direttiva "global" presente in alcune parti del codice non
funziona piu'.... il valore di tutte le variabili e' NULL (anche se,
attivando l'error reporting, non mi da il notice di variabile non
definita).
Quindi non vorrei che da qualche parte ci sia una direttiva di questo
tipo, e vorrei modificarla nella parte di codice che mi interessa.

Non so se puo' essere utile...
facendo un var_export di $GLOBAL mi da questo errore:
Fatal error:  Nesting level too deep - recursive dependency?

 definita).
Sei sicuro del modo in cui fai l'include e di aver incluso tutti i file
necessari?
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

Altro aiuto: la ini_get_all() non restituisce alcuna differenza (se non
relativamente all'error reporting che credo non influisca...)

Codice:
$pippo="pippo";
var_view($pippo,"Fuori");
function miafunc($param) {
	error_reporting(E_ALL);
	global $pippo;
	var_view(isset($pippo),"isset() Dentro");
	var_view($pippo,"Dentro");
	error_reporting(E_ERROR);
	...
}
Output esterno cms:
Fuori 'pippo'
isset() Dentro true
Dentro 'pippo'
Output interno cms:
Fuori 'pippo'
isset() Dentro false
Dentro NULL
Se elimino "global", in entrambi i casi ottengo "Notice: Undefined
variable: pippo ...", cosa che invece normalmente non ottengo.
Mi lascia perplesso, nell'output interno al CMS, il fatto che isset()
dia false in entrambi i casi ma che il notice me lo dia solamente
quando non faccio il "global"...
(la var_view è una funzione che uso per il debug che non fa altro che
richiamare la var_export con una formattazione html particolare...)

 richiamare la var_export con una formattazione html particolare...)
Posta la funzione var_view.


Con la var_export è uguale...
Cmq il codice è:
function var_view($var, $label=NULL) {
	echo '<pre style="font-size: 12px">';
	if ($label!==NULL) {
		echo '<b>'.$label.'</b> ';
	}
	var_export($var);
	echo "</pre>";
}
(funzione comodissima in fase di debug...)

 function var_view($var, $label=NULL) {
                   ^^^^^^
Per evitare i notice DEVI passare $var per riferimento, non per valore.
Comunque non si capisce che cosa tu intenda per "Output interno cms".
isset() restituisce false se la variabile non e' settata oppure se e'
NULL.


Cmq non è la var_view che mi da dei problemi, quella e' una funzione
di debug.
Il fatto principale è che la variabile all'interno della funzione non
è correttamente valorizzata!
Output esterno cms: carico la pagina php all'esterno del cms.
Output interno cms: carico la pagina php inclusa come contenuto
all'interno del cms.
Il problema di fondo è che quindi la global nel secondo caso non fa il
suo lavoro.





 suo lavoro.
IMHO dipende tutta da come viene effettuata "l'inclusione" dal CMS.
Utilizza $GLOBALS al posto di global e vedi che risultati ottieni.


Nell'esempio proposto non c'e'alcuna inclusione...
Con $GLOBALS non funziona lo stesso (vedo il mio secondo post)

 Con $GLOBALS non funziona lo stesso (vedo il mio secondo post)
[ti quoto]
Giusto perchè sto includendo un file php all'interno di un CMS (Typo3)
e la direttiva "global" presente in alcune parti del codice non
funziona piu'
[/ti quoto]
L'esempio che hai postato NON mostra nessuna parte di codice del CMS ne
come questo possa influenzare il funzionamento di global o lo scope
delle variabili.


All'iinzio il problema era quello e anch'io pensavo alle inclusioni.
Poi ho provato con la variabile $pippo che non è inclusa bensì è
nello stesso file.
Forse non avevo chiarito questo concetto...
Il codice del CMS non lo posto ovviamente, cmq è Typo3 e lo includo
con un suo plugin apposito per il codice PHP.
Il mio dubbio è che ci possa essere una riga di codice che permette di
disabilitare la direttiva "global".
Si puo' fare? Se sì, come?
Come posso fare, sempre con righe di codice, a disattivare
temporaneamente questa disabilitazione?
(Sempre che di questo si tratti...)