我正在尝试调试Magento中的PayPal审核流程.每次我尝试转储以下变量时,我都会得到一个白页:
//the variable declaration: $shippingAddress = $this->getShippingAddress(); //the dump that breaks the page: ';print_r($shippingAddress);echo ''; ?>
我还尝试在页面上使用一个变量,该变量用于if语句之外的其他内容.
//this variable displays results ';print_r($billingBlock->setShowAsShippingCheckbox(true)->toHtml());echo ''; ?> //however, this one does not: ';print_r($billingBlock);echo ''; ?>
我只是想知道什么可能导致我的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()));