全局覆盖var_dump?

时间:2014-02-28 08:41:33

标签: php

我不喜欢var_dump打印出对象的方式。我想用这个函数覆盖它:

function var_dump($object, $die = true) {
    print '<pre>';
    print_r($object);
    if ($die) die();
}

我知道如何在我的应用程序中覆盖它,但是有没有办法在PHP配置级别上为所有站点全局覆盖它?

2 个答案:

答案 0 :(得分:4)

你不能在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()请记住,这是邪恶。你不应该那样做,因为重新定义违背了功能和定义的原因。这是一个全球性的副作用,你应该避免这种行为。

答案 1 :(得分:1)

您可以使用override_functionhttp://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