【发布时间】:2011-11-06 12:03:33
【问题描述】:
我正在编写自己的 var_dump 以满足某些可能只适用于我并且有问题的要求。
代码检查对象、数组等,最后到达一个阶段,它认为它留下了一个数字、一个字符串或一个布尔值。
当然,一个字符串实际上可以是一个序列化的变量,所以我想为那个...
if (is_string($variable))
{
// check if it is serialzed; if so, unserialize & dump as an array, \
// with a suitable header indicating that it was serialized
try
{
$old_error_level= error_reporting(E_ALL ^ E_NOTICE);
$unserialized_varaible = @unserialize($variable);
$result .= my_dump($unserialized_varaible, ... <some params>); // recursive call
$old_error_level= error_reporting($old_error_level);
}
catch(Exception $e) // Treat it as a string
{
$old_error_level= error_reporting($old_error_level);
$result .= GetHtmlForSimpleVariable($variable, ... <some params>);
}
}
但是,当我尝试转储一个简单的、非序列化的字符串时,我得到的是
Problem type Notice "unserialize()
[<a href='function.unserialize'>function.unserialize</a>]:
Error at offset 0 of 14 bytes" at line 362 in file my_dump.php<br><br>
更新:当字符串不是序列化字符串时,我想抑制 E_NOTICE。我原以为@on @unserizlize() 会这样做,但是...
如果字符串是序列化的,那么一切都是笨拙的。如果不是,那就不是。
【问题讨论】:
-
这是函数
my_dump的错误,不是吗?unserialize似乎在工作,不是吗?否则,第 362 行在哪里,是您调用unserialize的那一行吗? -
对此感到抱歉。是的,unserialzie 在序列化的字符串上可以正常工作,但在未序列化时会发出通知。
-
它应该可以在没有通知的情况下完美运行,因为您正在使用
@消除任何错误。您是否偶然使用了禁用@的扩展程序? -
我猜stackoverflow.com/questions/1369936/…的回答会帮助你。
-
我不知道一个冷禁用@ - 但也许是Xdebug?
标签: php