2010-12-09 5 views
0

Ok Je sais que je peux avoir des propriétés privées qui empêchent une propriété d'être utilisée en dehors de la classe, mais est-il possible de rendre également cette propriété invisible en dehors de la classe?PHP propriétés de classe invisibles

Qu'est-ce que je veux dire est, est-il possible de faire en sorte que la propriété ne se présente même pas si je fais un print_r() ou foreach() de la classe?

+0

Je me souviens qu'il y a eu une discussion il y a quelques temps, et il y avait des versions de PHP qui ne montraient pas ces propriétés. Malheureusement, je ne peux pas le trouver pour le moment. Y a-t-il une raison particulière pour laquelle vous ne voudriez pas les afficher? La réflexion pourrait encore être utilisée pour les voir. –

+0

Voici deux rapports de bogues, http://bugs.php.net/bug.php?id=39118&edit=2 et http://bugs.php.net/bug.php?id=35822&edit=1. Comme vous pouvez le voir dans la réponse, ce n'est pas un bug mais plutôt une fonctionnalité. –

Répondre

0

global quelques noms de variables obscures dans toutes vos méthodes et de les utiliser comme des propriétés

Je ne veux plus jamais que cela se fasse, et je ne sais pourquoi vous souhaitez masquer les propriétés de l'inspection par le développeur, mais je supposons que ça marcherait.

+0

Je fais une classe d'enregistrement active pour php pour mon framework, chaque enregistrement est une classe à part avec les données en tant que propriétés. J'ai implémenté une méthode de sauvegarde dans chaque enregistrement mais pour que cela fonctionne, il doit utiliser une propriété avec la classe de base de données à l'intérieur. Je ne veux pas avoir à écrire du code supplémentaire pour supprimer cette propriété quand je suis en boucle dans un enregistrement, donc j'espérais qu'il y avait un moyen de cacher cette propriété. Comme vous, je pense aussi qu'il est imprudent d'utiliser un global, je pourrais avoir à le faire. –

0

Vous ne pouvez pas masquer les propriétés des fonctions de débogage, telles que print_r/var_dump. Cependant, ce que vous pouvez faire est de simuler les propriétés en utilisant __get/__set, comme ceci:

<?php 
class MyClass { 
    public function __get($name) { 
     if($name == "bar") { 
     /* take bar from somewhere */ 
     } 
    } 
    public function __set($name, $value) { 
     if($name == "bar") { 
     /* store $value somewhere */ 
     } 
    } 
} 

$foo = new MyClass(); 
$foo->bar = 1; 

De cette façon, vous pouvez travailler avec $ foo-> bar comme si elle était une propriété, même si cette propriété n'existe en réalité quand vous faites var_dump, etc.

Questions connexes