2010-12-09 2 views
0

Хорошо, я знаю, что у меня есть частные свойства, которые препятствуют использованию свойства вне класса, но возможно ли также сделать это свойство невидимым вне класса?Свойства невидимого класса PHP

Что я имею в виду, возможно ли сделать так, чтобы свойство даже не отображалось, если я делаю print_r() или foreach()?

+0

Я помню, что было об этом некоторое время назад, и были некоторые версии PHP, не показывающие эти свойства. К сожалению, я не могу найти его в данный момент. Есть ли какая-то особая причина, почему вы не хотите, чтобы они отображались? Отражение все еще можно было использовать для их просмотра. – 2010-12-09 07:23:01

+0

Здесь два отчета об ошибках, http://bugs.php.net/bug.php?id=39118&edit=2 и http://bugs.php.net/bug.php?id=35822&edit=1. Как вы можете видеть в ответе, это не ошибка, а скорее функция. – 2010-12-09 07:25:48

ответ

0

global некоторых непонятных имен переменных во всех ваших методах и использовать их как свойства

Я никогда не хочу видеть, что это сделано, и я не знаю, почему вы хотите, чтобы скрыть свойство от инспекции разработчика, но я предположим, что это сработает.

0

Вы не можете скрывать свойства от функций отладки, таких как print_r/var_dump. Тем не менее, то, что вы можете сделать, это имитировать свойства, используя __get/__set, например:

<?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; 

Таким образом, вы можете работать с $ foo-> бар, как будто это свойство, хотя на самом деле такое свойство не существует когда вы делаете var_dump и т. д.

Смежные вопросы