0

私は次の機能を持っています:

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 が長い、717 行目の /mypath/ で指定された文字列であると予想します ---> foreach((array)debug_backtrace($Object) as $aVal)

エラーの原因は何ですか? どうすれば修正できますか?

4

2 に答える 2

1

の最初のパラメータdebug_backtrace()は、オプションのビットマスク (つまり a 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;
}
于 2014-03-04T19:15:41.133 に答える
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;
}
于 2014-03-04T19:17:46.980 に答える