php - 什么会导致 print_r 和/或 var_dump 无法调试变量?

标签 php debugging magento

我正在尝试调试 Magento 中的 PayPal 审核流程。每次我尝试转储以下变量时,我都会得到一个白页:

//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 对象都包含对大量信息的引用——有时引用是循环的。 PHP 的 var_dumpprint_r 函数将盲目地遵循这些循环引用并尝试打印所有内容。这最终会导致 PHP 使用比 memory_limit ini 设置所允许的更多的内存,并且执行停止。

大多数 PHP 专业人员使用 xDebug扩展来解决这个问题。 xDebug 扩展有一个修改过的 var_dump 将限制转储的信息量,从而防止上述内存限制问题。 xdebug.var_display_max_childrenxdebug.var_display_max_dataxdebug.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 - 什么会导致 print_r 和/或 var_dump 无法调试变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588862/

相关文章:

debugging - Haskell 中的无限递归

debugging - PyCharm: Debugging: r(eturn) 继续执行直到当前函数返回

php - Magento 自定义左侧导航模板显示两次

magento - 在自定义页面中获取产品的选定自定义选项 (Magento)

Php - Insert Autoincrement Value - For Parent/Child Tables - 并发问题

.NET 应用程序挂起,我无法调试它

php - Dockerfile php-fpm 未满足的依赖项

php - 如何获取产品所在的类别 ID 与我当前所在的商店有关

php - 在 Laravel 中为博客生成存档列表

PHP 警告 : include_once() Failed opening '' for inclusion (include_path ='.;C:\xampp\php\PEAR' )