Ordinastie
Messages postés93Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention17 octobre 2008
-
2 juil. 2007 à 15:34
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 2023
-
4 juil. 2007 à 18:54
Bonjour,
J'ai une classe permettant l'affichage d'un cadre plus ou moins grahique autour d'un contenu. Pour chaque chaque cadre j'appelle une méthode pour la définition du contenu que je passe en paramètre (simple string).
J'ai voulu amélioré ma méthode pour qu'elle détecte si la string passée en paramètre correspond à un fichier, et si c'est le cas, elle récupère le contenu du fichier.
public
function
SetContent(
$c
)
{
if(is_file($c
))
{
ob_start
();
require($c
);
$c = ob_get_contents
();
ob_end_clean
();
}
$this->_contents = $c
;
}
Mon problème, c'est que le contexte d'exécution du fichier inclu, c'est la méthode, et donc les variable du fichier ne sont pas initialisés.
Donc existe-t-il un moyen pour que si je fais:
Ordinastie
Messages postés93Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention17 octobre 20082 4 juil. 2007 à 11:01
Bon, en regardant ce que donnait le get_defined_vars() , je me suis rendu compte d'une autre chose étonnante et j'ai l'impression que c'est pas trop normal:
la variable $GLOBALS contient déjà toutes les variables utilisées, et pas seulement celles qui doivent être en global, et c'est pas ce à quoi je m'attendais...
Donc finalement je m'en suis servi, plutot que d'avoir a passer systématiquement la fonction en get_defined_vars() paramètre.
Le code est devenu :
public
function SetContent(
$_content_)
{
if(
is_file(
$_content_))
{
/* if(!$vars || !is_array($vars))
trigger_error('Array expected as 2nd parameter but got ' . gettype($vars) . '', E_USER_ERROR);
*/
$ignore =
array(
'GLOBALS',
'_ENV',
'HTTP_ENV_VARS',
'_POST',
'HTTP_POST_VARS',
'_GET',
'HTTP_GET_VARS',
'_COOKIE',
'HTTP_COOKIE_VARS',
'_SERVER',
'HTTP_SERVER_VARS',
'_FILES',
'HTTP_POST_FILES',
'_REQUEST',
'HTTP_SESSION_VARS',
'_SESSION',
'_content_');
// sinon le path est overridé par le global si elle existe déja
Ordinastie
Messages postés93Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention17 octobre 20082 2 juil. 2007 à 18:49
Salut,
Oui, effectivement, ça, ca marche. Mais ça marche à condition de connaître toutes les variables calculées avant et nécessitées pendant. Et quand bien même, c'est pas trop le but recherché de spécifier avant chaque utilisation de variable qu'il est en global.
Mais je suis pas spécialement convaincu que ce que je veux faire, soit faisable :)
@+ Ordinastie
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ordinastie
Messages postés93Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention17 octobre 20082 3 juil. 2007 à 11:51
Ah, j'y ai presque cru :)
Malheureusement, selon le manuel Php :
get_defined_vars() retourne un tableau multidimensionnel contenant la liste de toutes les variables définies, qu'elles soient des variables d'environnement, de serveur ou définies par l'utilisateur dans la portée d'appel de la fonction get_defined_vars().
Donc je n'ai accès qu'aux variables de la méthode. :(
Je suis de moins en moins convaincu que l'on puisse overrider le contexte d'exécution d'un fonction, alors en attendant, je fais comme ca:
Dans la classe :
public
function
StartContent()
{
ob_start();
}
public
function EndContent()
{
$c = ob_get_contents();
ob_end_clean();
$this->_contents = $c;
}
L'appel :
$cadre
=
new
Cadre(
'Mon cadre'
);
$cadre
->StartContent();
require
(
'myfile.php'
);
$cadre
->EndContent();
C'est pas vraiment ce que j'aurai voulu, mais je crois que j'ai pas trop le choix là :)
Si quelqu'un a d'autres idées, je suis preneur!
Flachy Joe
Messages postés2103Date d'inscriptionjeudi 16 septembre 2004StatutMembreDernière intervention21 novembre 20231 4 juil. 2007 à 18:54
$GLOBAL est défini comme un tableau superglobal regroupant toutes les variables du contexte global et donc le mot clef global (qui sert à faire corespondre une variable globale avec une variable locale ayant le même nom) n'a aucune incidence sur son contenu.
$GLOBAL contient toutes les variables définies en dehors des fonctions, même celles définient dans des inclusions et tant que ces inclusions sont faites au niveau global.