savoir où est setée une variable

savoir où est setée une variable - PHP - Programmation

Marsh Posté le 06-11-2009 à 14:48:43    

Dans mon projet de refactoring, quelque part dans un des scripts, j'ai une variable global dans une fonction.
si je fais un var_dump(); je vois qu'elle est setée à true.
Oui mais il n'y a aucune référence à cette variable ailleurs dans tout le projet.
Est-ce qu'il y a un moyen de seter une variable sans la mentionner explicitement ?  :heink:

Reply

Marsh Posté le 06-11-2009 à 14:48:43   

Reply

Marsh Posté le 06-11-2009 à 20:09:56    

oui , si register_globals est a true , ou pire , si le nom de variable est construit dynamiquement  
 
genre ${'toto'.$i}


---------------

Reply

Marsh Posté le 07-11-2009 à 20:08:59    

C'était ça  [:prozac]  
 
20 scripts plus loin dans 3 foreach imbriqués, y a un moment y a un  
foreach ($report as $report_id){
...
$$report_id = true;
...
}
qui traine
 
Deux jours à débug
 
Est-ce qu'il existe un debugger qui peut détecter ce genre de truc ?  [:hotshot:3]  

Reply

Marsh Posté le 07-11-2009 à 22:13:47    

Moi dans ce genre de cas je passe la variable en constante via un define() au tout début du script et je regarde où ça pête


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-11-2009 à 08:03:49    

c'est pas idiot, mais ça risque de ne pas marcher ...
 
define('MA_VAR', true); ne définit pas la même chose que $MA_VAR, si ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 08-11-2009 à 09:07:54    

Je viens de faire un test et effectivement même si PHP permet plein de hacks, là il y a un soucis.
 

Code :
  1. define('$val',1);
  2. $val=2;
  3. echo $val;
  4. echo constant('$val');


 
Selon la doc "$val" n'est pas un nom de constante valide, cependant il est accepté. Par contre si on essaie de faire $val = 2, PHP crée une variable $val et la met à 2. Donc les 2 dernière lignes retournent 2 choses différentes...
 
Donc en effet, en php ça marche pas (j'ai parlé trop vite désolé :D C'est un truc que j'utilise en Ruby en général)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 09-11-2009 à 10:18:42    

Est-ce que quelqu'un aurait une solution pour ça ?
 
Même du coté de Xdebug ce n'est pas encore implémenté, il faudra attendre la version 2.1 : http://derickrethans.nl/variable_t [...] xdebug.php

Reply

Marsh Posté le 09-11-2009 à 15:13:00    

Bon alors,
y a moyen de savoir où sa pète la première fois :

 
Code :
  1. class debug{
  2. public function __destruct(){
  3. echo '<pre>';
  4. print_r(debug_backtrace());
  5. die();
  6. }
  7. }
  8. $a = new debug();
  9. //plus tard dans le script
  10. $a =5;
 

[edit] un peu mieux


Message édité par Profil supprimé le 10-11-2009 à 09:48:08
Reply

Marsh Posté le 09-11-2009 à 15:28:49    

pas simple en effet,  
avec debug_zval_dump  tu peu savoir combien de fois elles a été mise mais pas de numero de ligne

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed