Отображать данные из закрытых / защищенных свойств и методов - PullRequest
0 голосов
/ 19 февраля 2011

Я выполняю print_r () для объекта.Который отображает красиво отформатированный вывод.Тем не менее, я хочу контролировать вывод.Я хочу иметь возможность форматировать и добавлять заголовки / заголовки в определенные разделы вывода.print_r () потрясающая, но я не могу понять, как получить доступ к различным строкам в выводе.Я попытался сделать что-то вроде этого:

echo '<h1>ERRORS</h1>';
echo '<h3>Properties</h3>';
print_r(Exception::$message);

Тем не менее, $ message установлено как защищенное свойство, поэтому я получил эту ошибку:

Fatal error: Cannot access protected property Exception::$message...

Я не хочуполучить доступ к $ message, чтобы изменить его.Я просто хочу отобразить это как print_r () ... но хорошо отформатировал мой путь.Возможно, я не совсем понимаю, что на самом деле означает «доступ».

Я также попробовал что-то вроде этого:

$lines = explode("\n", print_r(Exception::$message, true));
foreach ($lines as $line) {
    echo $line;
}

... но я получаю ту же ошибку

Fatal error: Cannot access protected property Exception::$message...

Есть ли способ сделать это?Или есть способ правильно получить доступ к содержимому print_r ()?

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

print_r(), а также var_dump() предназначены только для отладки, поэтому никогда не предполагалось, что это должно выглядеть красиво.

Однако, если вы хотите вывести объект более "красиво", вынужно построить это самостоятельно.Взгляните на Reflection-API .

. Вы НИКОГДА не должны оставлять этот (отладочный) вывод на рабочем сервере!

0 голосов
/ 19 февраля 2011

вывод print_r - это простой текст, и вы не можете его контролировать - это просто дамп содержимого некоторой переменной или объекта. Если вы хотите отформатировать, вам придется свернуть свою собственную версию print_r, особенно если вы хотите иметь дело с защищенными / закрытыми частями объекта. Поскольку они защищены, вы не можете получить к ним доступ снаружи объекта.

, например

 $x = new MyObj;
 print_r($x::some_protected_variable);

не будет работать, так как вы не «внутри» объекта при доступе к этой переменной. Вам нужно добавить метод dump к объекту:

 $x = new MyObj;
 $x->dump('some_protected_variable');

и функция дампа делает доступ / сброс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...