我正在编写自己的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。我原以为@
@unserizlize()
会这样做,但是......
如果字符串是序列化的,那么一切都是hunky dory。如果没有,那就没有。
答案 0 :(得分:3)
当您尝试反序列化它时,如果未序列化,则返回false
。它还返回一个E_NOTICE,它是输出的来源。
从手册:
如果传递的字符串不可反序列化,则返回FALSE 并且发布了E_NOTICE。
检查反序列化===false