首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么会导致print_r和/或var_dump调试变量失败?

什么会导致print_r和/或var_dump调试变量失败?
EN

Stack Overflow用户
提问于 2014-02-05 21:26:16
回答 2查看 5.3K关注 0票数 7

我试图在Magento中调试PayPal评审过程。每当我尝试转储以下变量时,我都会得到一个白页:

代码语言:javascript
复制
//the variable declaration:
$shippingAddress = $this->getShippingAddress();

//the dump that breaks the page:
 <?php echo '<pre>';print_r($shippingAddress);echo '</pre>'; ?>

我还尝试在页面上使用一个变量,该变量用于除if语句之外的其他内容。

代码语言:javascript
复制
//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打破了这个页面?如果不能转储,如何查看对象中的内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-05 21:51:54

首先,PHP从来没有“仅仅是白页”。当您得到一个空白屏幕时,这意味着PHP的执行由于某种原因而停止。但是,除非您的服务器被配置为不记录错误,否则PHP错误日志或Magento异常日志应该会出现错误。

就您的具体问题而言,Magento的许多对象包含对大量信息的引用- and,有时引用是循环的。PHP的var_dumpprint_r函数将盲目地遵循这些循环引用,并尝试打印所有内容。这最终导致PHP使用比memory_limit ini设置所允许的内存更多的内存,并停止执行。

大多数PHP专业人员使用xDebug扩展来解决这个问题。xDebug扩展有一个经过修改的var_dump,它将限制转储的信息量,从而防止上述内存限制问题。如果xDebug仍然无法解决内存限制问题,则需要调整xdebug.var_display_max_childrenxdebug.var_display_max_dataxdebug.var_display_max_depth ini设置。(有些PHP发行版的初始设置过高)

如果这是不可能的,对你的var_dump谨慎一点仍然会有帮助。

使用它来计算变量类型。

代码语言:javascript
复制
var_dump(get_class($thing));

如果它是Magento对象,请使用它查看其数据键

代码语言:javascript
复制
var_dump(array_keys($thing->getData()));

然后输出单个数据成员。

代码语言:javascript
复制
var_dump($thing->getData('key_name'));
var_dump($thing->getKeyName()));
票数 15
EN

Stack Overflow用户

发布于 2014-02-05 21:45:04

PHP解析和致命错误将产生这种情况。您可能希望查看错误日志。

您可以尝试在php文件的开头添加以下行(就在打开的PHP标记之后)“

代码语言:javascript
复制
ini_set('display_errors',1);
error_reporting(E_ALL);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21588862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档