Discussion:
Propriétés private et tableau $GLOBALS
(trop ancien pour répondre)
Alarch
2008-10-01 19:26:55 UTC
Permalink
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.
Pascal PONCET
2008-10-02 12:58:08 UTC
Permalink
Post by Alarch
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
2008-10-02 19:58:57 UTC
Permalink
Post by Alarch
Post by Alarch
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.

Continuer la lecture sur narkive:
Loading...