Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Propriétés private et tableau $GLOBALS

2 réponses
Avatar
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.

2 réponses

Avatar
Pascal PONCET
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
Avatar
Alarch
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.