Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
899 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] - Variable inaccessible via autre fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] - Variable inaccessible via autre fichier

n°1580251
AlphaZone
Posté le 28-06-2007 à 10:31:20  profilanswer
 

Bonjour à tous,
 
Je suis en train développer un site. Je me base sur le design pattern MVC.
 
J'ai un répertoire config, models, views, controllers.
Dans le répertoire config, je rassemble toute la configuration comme la config pour la BDD, config du site, etc... J'ai également un fichier qui contient les messages erreurs (errorsLog.php).
 
Dans mon répertoire j'ai une classe dans lequel je fais appel à mon fichier errorsLog.php via un include_once() puis dans mes méthodes, je déclare mon tableau contenant les messages d'erreurs : global $errors;
 
Jusqu'à présent tout fonctionnait. Puis hier soir, j'ai voulu changer le nom du tableau en $lang et le nom du fichier errorsLog.php en lang.php. Et depuis, plus aucun affichage.
J'ai fait un echo dans mon fichier lang.php : j'ai bien accès au tableau mais quand je fais un echo dans ma classe, plus rien ne s'affiche.
J'ai rien modifié en dehors des noms.
 
 
Est-ce que cela vous est déjà arrivé ? Si oui, pourquoi ca me fait ca ?
Merci pour votre aide.

Message cité 1 fois
Message édité par AlphaZone le 03-07-2007 à 12:12:19

---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
mood
Publicité
Posté le 28-06-2007 à 10:31:20  profilanswer
 

n°1580301
AlphaZone
Posté le 28-06-2007 à 11:58:02  profilanswer
 

Dans un deuxième site que je développe, j'ai procédé de la même façon, c'est à dire que j'ai appelé la fonction include_once pour inclure un fichier et lorsque j'ai utilisé global $maVar dans l'une des méthodes, celle-ci ne contenait rien.
 
J'ai décidé placer mon fichier inclut dans la méthode même, et ça fonctionne. Pas même besoin d'un global.
 
Comment se fait-il que je ne puisse pas accéder à une variable extérieur à l'intérieur de ma classe ? C'est quand même bizarre ! Normalement, en mettant global, ca devrait fonctionner, vous ne croyez pas ?  
 
Dans mon premier post, comment se fait-il que je pouvais accéder à ma variable et qu'après avoir modifier le nom, je ne pouvais plus ?
 
Merci pour ceux qui éluciderons ce mystère.


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1580690
AlphaZone
Posté le 29-06-2007 à 10:57:44  profilanswer
 

Comment se fait-il que ça, ça marche :
lang.php

Code :
  1. <?php
  2. $lang['OK'] = "ok ca marche";
  3. ?>


 
test.php

Code :
  1. <?php
  2. include_once('lang.php');
  3. class Test {
  4. public function run() {
  5.  global $lang;
  6.  echo $lang['OK'];
  7. }
  8. }
  9. $t = new Test();
  10. $t->run();
  11. ?>


 
Et dans le développement de mes sites, je procède de la même façon et ça ne marche pas. Pourquoi?


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1580704
cgo2
Dum spiro spero
Posté le 29-06-2007 à 11:14:51  profilanswer
 

AlphaZone a écrit :

Et depuis, plus aucun affichage.
J'ai fait un echo dans mon fichier lang.php : j'ai bien accès au tableau mais quand je fais un echo dans ma classe, plus rien ne s'affiche.


 
Je suis pas sûr d'avoir bien pigé ton problème, et si en plus rien ne s'affiche, c'est pas gagné...  :sweat:  
Alors commence par activer toutes les erreurs ( error_reporting(E_ALL|E_STRICT); ), supprimer tous les opérateurs de silence que tu aurais pu mettre (les @ devant les fonctions, particulièrement les include), si besoin vérifier la config de php pour être sûr que les erreurs sont bien affichées/logguées, etc. Ca devrait permettre d'y voir plus clair.


---------------
When it's from Finland it's good.  - Mon blog
n°1580725
AlphaZone
Posté le 29-06-2007 à 11:36:58  profilanswer
 

J'ai activé toutes les erreurs. J'avais quelques petits bugs. Choses résolu à 98%, j'ai un problème de date_default_timezone_set() mais bon, ce n'est pas trop grave.

 

J'ai toujours le même problème : J'ai beau essayé d'accéder à mes tableaux (déclaré dans le fichier lang.php) depuis ma classe via global, rien à faire. Aucun affichage.


Message édité par AlphaZone le 29-06-2007 à 11:37:43

---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1580974
cgo2
Dum spiro spero
Posté le 29-06-2007 à 23:22:34  profilanswer
 

Aucun affichage c'est bizarre, t'es sûr que t'utilise pas l'opérateur @ avant de faire tes includes ?
Sinon j'en sais rien, ça ressemble à une erreur à la con, genre une typo dans le nom de la variable, ou dans le nom du fichier à inclure, etc.
 
Quelques pistes :
- Test l'affichage avec var_dump au lieu de echo (tu verras exactement le type)
- Vérifie que tu inclus bien le fichier dans l'espace global (et pas dans une fonction)
- Essaye d'afficher tout le tableau, pas seulement un champ
- Test si le tableau est défini avec isset
- Essaye de mettre un echo dans le fichier que tu veux inclure pour être sûr que c'est bien lui qui est inclus
- etc.


---------------
When it's from Finland it's good.  - Mon blog
n°1581386
AlphaZone
Posté le 02-07-2007 à 10:38:14  profilanswer
 

cgo2 a écrit :

Aucun affichage c'est bizarre, t'es sûr que t'utilise pas l'opérateur @ avant de faire tes includes ?


Oui certain.
 

cgo2 a écrit :

Quelques pistes :
- Test l'affichage avec var_dump au lieu de echo (tu verras exactement le type)


J'essai d'afficher le type de ma variable et ca me retourne NULL
 

cgo2 a écrit :


- Vérifie que tu inclus bien le fichier dans l'espace global (et pas dans une fonction)


Toutes mes inclusions se font en global à part pour certains fichiers que je fais en local comme ceci :

Code :
  1. <?php
  2. include_once('configs/pages.php');
  3. class FrontController {
  4. public function run(){
  5.  global $pages;
  6.  $i = (!isset($_GET['p']) ||empty($_GET['p'])) ? 0 : (integer)$_GET['p'];
  7.  if (array_key_exists($i, $pages)) {
  8.   $Controller = $pages[$i].'Controller';
  9.   include('controllers/'.$Controller.'.php');
  10.   $ctrl = new $Controller();
  11.   $ctrl->run();
  12.  } else {
  13.   header('location: empresa.html');
  14.   exit;
  15.  }
  16. }
  17. }
  18. ?>


Tu crois que ca viendrais de ca ?
 

cgo2 a écrit :


- Essaye d'afficher tout le tableau, pas seulement un champ


Déjà essayé. Sans résultat.
 

cgo2 a écrit :


- Essaye de mettre un echo dans le fichier que tu veux inclure pour être sûr que c'est bien lui qui est inclus
- etc.


Déjà fait.


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1581492
rufo
Pas me confondre avec Lycos!
Posté le 02-07-2007 à 15:08:50  profilanswer
 

et si tu fais un echo de $GLOBALS["lang"]["OK"]?

n°1581494
AlphaZone
Posté le 02-07-2007 à 15:11:23  profilanswer
 

Rien à faire :'(


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1581498
cgo2
Dum spiro spero
Posté le 02-07-2007 à 15:19:09  profilanswer
 

AlphaZone a écrit :

Toutes mes inclusions se font en global à part pour certains fichiers que je fais en local comme ceci :

Code :
  1. <?php
  2. include_once('configs/pages.php');
  3. class FrontController {
  4. public function run(){
  5.  global $pages;
  6.  $i = (!isset($_GET['p']) ||empty($_GET['p'])) ? 0 : (integer)$_GET['p'];
  7.  if (array_key_exists($i, $pages)) {
  8.   $Controller = $pages[$i].'Controller';
  9.   include('controllers/'.$Controller.'.php');
  10.   $ctrl = new $Controller();
  11.   $ctrl->run();
  12.  } else {
  13.   header('location: empresa.html');
  14.   exit;
  15.  }
  16. }
  17. }
  18. ?>


Tu crois que ca viendrais de ca ?


 
Je ne sais pas, quel est le rapport entre ce bout de code et l'inclusion de ton fichier lang.php ? Je ne comprends pas, je ne le vois pas dans l'exemple.


---------------
When it's from Finland it's good.  - Mon blog
mood
Publicité
Posté le 02-07-2007 à 15:19:09  profilanswer
 

n°1581502
AlphaZone
Posté le 02-07-2007 à 15:21:36  profilanswer
 

Ce bout de code inclut d'autres pages qui elles font appels à la page lang.php
 
Voici la page appélée qui inclut le fichier lang.php :

Code :
  1. <?php
  2. include_once('views/FrontView.php');
  3. include_once('configs/lang.php');
  4. class ContactoView extends FrontView {
  5. public function displayContacto(){
  6.  global $info;
  7.  $this->setVar('nome', htmlentities($info['nome']));
  8.  $this->setVar('morada', htmlentities($info['morada']));
  9.  $this->setVar('districto', htmlentities($info['districto']));
  10.  $this->setVar('localidade', htmlentities($info['localidade']));
  11.  $this->setVar('telefone', htmlentities($info['telefone']));
  12.  $this->setVar('fax', htmlentities($info['fax']));
  13.  $this->setVar('email', htmlentities($info['email']));
  14.  $this->displayPage('contacto');
  15. }
  16. }
  17. ?>


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1581590
cgo2
Dum spiro spero
Posté le 02-07-2007 à 17:20:02  profilanswer
 

AlphaZone a écrit :

Ce bout de code inclut d'autres pages qui elles font appels à la page lang.php


 
Ce qui fait que, au final, si je comprend bien, "lang.php" est inclu par une fonction ?
 
 


---------------
When it's from Finland it's good.  - Mon blog
n°1581603
AlphaZone
Posté le 02-07-2007 à 17:40:53  profilanswer
 

En gros, OUI.
 
Sauf que, avant, je n'avais aucun problème. Je me suis juste amusé à renommer mon fichier et mon tableau. Depuis, PAF! Plus rien.
 
Et cette "bizarrerie" est revenu lorsque j'ai crée un deuxième site. Cette fois, ca me là fait dès la première exécution.


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1581614
cgo2
Dum spiro spero
Posté le 02-07-2007 à 17:59:00  profilanswer
 


 
Alors c'est une simple question de portée de variables. Pour vérifier, essaye de définir ton tableau avec $GLOBALS['lang'] au lieu de $lang.


---------------
When it's from Finland it's good.  - Mon blog
n°1581625
AlphaZone
Posté le 02-07-2007 à 18:08:07  profilanswer
 

Ok, je test ça ce soir. Je te tiens au courant. Merci pour ton aide.


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
n°1581836
AlphaZone
Posté le 03-07-2007 à 12:11:54  profilanswer
 

J'ai trouvé remède à mon problème.
 
J'ai inclus mon fichier lang.php dans ma page FrontController.php (page qui gère les sous-controllers) en global. Dorénavant, ça fonctionne :)
 
Merci pour toutes les infos, ça m'a permit d'avoir un peu de recul sur la chose.


---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] - Variable inaccessible via autre fichier

 

Sujets relatifs
[Résolu] heritage des fauilles de stylesouvrir un fichier csv en vba
Variable Javascript -> PHP[Résolu] Question basique a propos des WebUserControl
[Résolu] Pb CSS : cadre qui bouge...[VBA] variable et heure absolue
[Résolu] Variables... Incroyable ![Résolu]Cherche façon plus simple de créer un site ? -> MVC
[résolu] transformer string en array (maladie ?)[PHP]Ouverture d'un fichier sur le pc
Plus de sujets relatifs à : [Résolu] - Variable inaccessible via autre fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR