2014-03-04 35 views
0

我有以下功能:debug_backtrace - 長參數

function backtrace($Object=false) 
{ 
    $x = 0; 
    foreach((array)debug_backtrace($Object) as $aVal) 
    { 
     $row[$x]['file']  = $aVal['file']; 
     $row[$x]['line']  = $aVal['line']; 
     $row[$x]['function'] = $aVal['function']; 
     $row[$x]['class'] = $aVal['class']; 
     $row[$x]['args']  = $aVal['args']; 
     ++$x; 
    } 
    return $row; 
} 

但是,當我使用它,我發現了一個錯誤,如下面:

警告:debug_backtrace()預計參數1 ((array)debug_backtrace($ Object)as $ aVal)

什麼原因導致錯誤?我該如何解決它?

+0

你看過手冊:http://pl1.php.net/debug _backtrace?從5.3.6開始,第一個參數是位掩碼。 – ziollek

回答

1

debug_backtrace()的第一個參數是選項的位掩碼(即long)。在5.3.6之前的PHP版本中,它是一個簡單的布爾型true/false

要修復它,要麼不要傳遞當前通過的$Object變量將其更新爲您希望使用的支持選項的任意組合。

例子:

$Object = DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT; 

如果你想前置條件添加到您當前的代碼,將設置一個默認值,如果$Object是無效塊,你可以嘗試這樣的:

function backtrace($Object = false) { 
    if (!is_long($Object) || (!($Object & DEBUG_BACKTRACE_PROVIDE_OBJECT) && !($Object & DEBUG_BACKTRACE_IGNORE_ARGS))) { 
     $Object = 0; 
    } 

    $x = 0; 
    foreach((array)debug_backtrace($Object) as $aVal) { 
     $row[$x]['file']  = $aVal['file']; 
     $row[$x]['line']  = $aVal['line']; 
     $row[$x]['function'] = $aVal['function']; 
     $row[$x]['class'] = $aVal['class']; 
     $row[$x]['args']  = $aVal['args']; 
     ++$x; 
    } 
    return $row; 
} 
0

爲PHP> = 5.3.6,你應該使用掩碼選項

function backtrace($Object=false) { 
    $x = 0; 
    foreach((array)debug_backtrace($Object ? DEBUG_BACKTRACE_PROVIDE_OBJECT : 0) as $aVal) 
    { 
     $row[$x]['file']  = $aVal['file']; 
     $row[$x]['line']  = $aVal['line']; 
     $row[$x]['function'] = $aVal['function']; 
     $row[$x]['class'] = $aVal['class']; 
     $row[$x]['args']  = $aVal['args']; 
     ++$x; 
    } 
    return $row; 
}