我正在尝试调试 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_dump
和 print_r
函数将盲目地遵循这些循环引用并尝试打印所有内容。这最终会导致 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 - 什么会导致 print_r 和/或 var_dump 无法调试变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21588862/