Что вызовет ошибку print_r и / или var_dump для отладки переменной?

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

//the variable declaration: $shippingAddress = $this->getShippingAddress(); //the dump that breaks the page: <?php echo '<pre>';print_r($shippingAddress);echo '</pre>'; ?> 

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

 //this variable displays results <?php echo '<pre>';print_r($billingBlock->setShowAsShippingCheckbox(true)->toHtml());echo '</pre>'; ?> //however, this one does not: <?php echo '<pre>';print_r($billingBlock);echo '</pre>'; ?> 

Мне просто интересно, что может заставить мой var_dump сломать страницу? Как узнать, что находится в объекте, если я не могу сбросить его?

Во-первых, PHP никогда не «просто белые страницы». Когда вы получаете пустой экран, это означает, что выполнение PHP прекратилось по какой-то причине. Однако, если ваш сервер не настроен не регистрировать ошибки, журнал ошибок PHP или журнал ошибок Magento должны иметь для вас ошибку.

Что касается вашей конкретной проблемы, многие объекты Magento содержат ссылку на большой объем информации, и иногда ссылки являются круговыми. var_dump и var_dump PHP будут слепо следовать этим циркулярным ссылкам и пытаться распечатать все. В конечном итоге это приводит к тому, что PHP использует больше памяти, чем допускается установкой memory_limit ini, а выполнение останавливается.

Большинство профессионалов PHP используют расширение xDebug, чтобы обойти это. Расширение xDebug имеет модифицированный параметр var_dump , который ограничивает объем сбрасываемой информации, что предотвращает проблемы с вышеуказанными ограничениями памяти. Параметры xdebug.var_display_max_children , xdebug.var_display_max_data и xdebug.var_display_max_depth ini – это те, которые вы хотите настроить, если xDebug все еще не помогает с проблемой ограничения памяти. (некоторые дистрибутивы PHP имеют слишком высокий набор)

Если это не возможно, небольшая осторожность в работе с var_dump может по-прежнему помогать.

Используйте это, чтобы выяснить тип переменной

 var_dump(get_class($thing)); 

Если это объект Magento, используйте его, чтобы увидеть его ключи данных

 var_dump(array_keys($thing->getData())); 

Затем выведите отдельные элементы данных с помощью

 var_dump($thing->getData('key_name')); var_dump($thing->getKeyName())); 

Это приведет к анализу PHP и фатальной ошибке. Возможно, вы захотите просмотреть свой журнал ошибок.

Вы можете попробовать добавить следующие строки в начало ваших php-файлов (сразу после открытия PHP-тега)

 ini_set('display_errors',1); error_reporting(E_ALL);