2014-02-28 34 views
3

我不喜欢var_dump打印对象的方式。我想用这个功能来覆盖它:全局重写var_dump?

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

我知道如何重写它在我的应用程序,但有没有办法在全球范围内覆盖它在PHP配置级别的所有网站?

+0

你可以把它放到PHP的默认包含路径,并把文件自动加载总是? – Smar

+0

这是最优雅的解决方案吗?我的直觉告诉我,这有一条小路。 – coderama

+0

对我来说,最优雅的解决方案是始终在应用程序级别覆盖它;这样,当你移动到另一台服务器时,它不会中断。 – Smar

回答

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