我不喜欢var_dump打印对象的方式。我想用这个功能来覆盖它:全局重写var_dump?
function var_dump($object, $die = true) {
print '<pre>';
print_r($object);
if ($die) die();
}
我知道如何重写它在我的应用程序,但有没有办法在全球范围内覆盖它在PHP配置级别的所有网站?
我不喜欢var_dump打印对象的方式。我想用这个功能来覆盖它:全局重写var_dump?
function var_dump($object, $die = true) {
print '<pre>';
print_r($object);
if ($die) die();
}
我知道如何重写它在我的应用程序,但有没有办法在全球范围内覆盖它在PHP配置级别的所有网站?
你不能这样做,目前(通过“好办法”)在PHP。还有更多 - 你不应该。 var_dump()
正在做它的意图:纯输出,没有更多。如果你想改变这一点,那么根据定义你需要一些用户定义的行为。因此:
否则,如果要通过某种原因与var_dump()
名的人,请使用namespace
像:
namespace Utils;
function var_dump($var, $exit=true, $return=true)
{
$result = sprintf('<pre>%s</pre>', print_r($var, true));
if($exit)
{
echo $result;
exit;
}
if($return)
{
return $result;
}
echo $result;
}
所以使用会是这样的:
$obj = new StdClass();
$str = \Utils\var_dump($obj, false);
//do domething with $str
echo $str; //or use second false
最坏的情况:runkit_function_redefine()
记住,这是邪恶。你不应该那样做,因为重新定义与功能以及定义的原因不符。这是一个全球性的副作用,你应该避免这种行为。
您可以使用override_function
:http://www.php.net/manual/en/function.override-function.php来替换var_dump
函数的行为。如果要包括这段代码在所有网站,你可以把这个在您的php.ini
文件:
php_value auto_prepend_file /path/to/file_where_you_override_function.php
你可以把它放到PHP的默认包含路径,并把文件自动加载总是? – Smar
这是最优雅的解决方案吗?我的直觉告诉我,这有一条小路。 – coderama
对我来说,最优雅的解决方案是始终在应用程序级别覆盖它;这样,当你移动到另一台服务器时,它不会中断。 – Smar