Propriétés private et tableau $GLOBALS

Le
Alarch
Bonjour,

je vais essayer d'être le plus clair possible.

En testant un exemple du site de documentation php pour contourner
l'impossibilité d'utiliser les variables variables avec les superglobales
je m'apperçois que le bout de code proposé appliqué au tableau $GLOBALS :

function indir($name) {
$moe = eval("return $$name;");
echo "<pre>";
print_r($moe);
echo "</pre>";
}
indir("GLOBALS");

m'affiche la valeur de toutes les propriétés d'une classe de connexion à
mysql (que je chargeais et utilisait dans mon script de test). Je vois
entre autre le mot de passe de connexion alors que dans la classe (PHP5) la
propriété qui le contient il est déclaré comme "private", que la classe et
le fichier contenant le mot de passe sont dans un répertoire d'include au
dessus d'htdocs et que cette propriété est instanciée par le constructeur
de la classe.

Naïvement je pensais qu'il ne pouvait ainsi pas être affiché dans $GLOBALS,
et ce n'est pas le cas.

Donc je n'ai pas bien compris les problèmes de portée de variables dans
PHP, si quelqu'un pouvait m'éclairer un peu sur ce sujet.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal PONCET
Le #17400791
Alarch a écrit :
Naïvement je pensais qu'il ne pouvait ainsi pas être affiché dans $GLOBALS,
et ce n'est pas le cas.



Bonjour,
extrait de la doc PHP sur la fonction print_r() : "print_r(), var_dump()
et var_export() afficheront également les propriétés protégées et
privées d'un objet en PHP 5". CQFD !
Cordialement,
Pascal
Alarch
Le #17405441
Pascal PONCET wrote:

Alarch a écrit :
Naïvement je pensais qu'il ne pouvait ainsi pas être affiché dans
$GLOBALS, et ce n'est pas le cas.



Bonjour,
extrait de la doc PHP sur la fonction print_r() : "print_r(), var_dump()
et var_export() afficheront également les propriétés protégées et
privées d'un objet en PHP 5". CQFD !
Cordialement,
Pascal



Merci, entre temps je m'étais rendu compte qu'on parcourant $GLOBALS dans un
foreach par exemple on avait une erreur sur les objets. Mais je n'avais pas
remarqué cet alinéa dans la doc, honte à moi.

Il me reste donc à regarder si l'on peut bloquer ces fonctions (je pense
dans le php.ini) avant de laisser un autre que moi mettre du code sur le
serveur.

Merci encore pour la réponse.
Publicité
Poster une réponse
Anonyme