0

このような CodeIgniter コードを使用して php をプログラミングしているときに、この通知に遭遇しました。ログ中に行とファイル名を表示するために使用されます。私はこれを試しました

    //get debug messages such as functionname, linenum,etc.
    if ($level == 'debug') {
        $debug_info = debug_backtrace(!DEBUG_BACKTRACE_PROVIDE_OBJECT
                                && DEBUG_BACKTRACE_IGNORE_ARGS);
        $debug_info = $debug_info[1];
        $debug_message = '('.
            isset($debug_info['file'])?$debug_info['file']:''.
            isset($debug_info['class'])?$debug_info['class']:''.
            isset($debug_info['type'])?$debug_info['type']:''.
            isset($debug_info['function'])?$debug_info['function']:''.
            isset($debug_info['line'])?$debug_info['line']:''.
            ')';
        $message = $debug_message.$message;
    }

array_key_exist() を使用して判断しますが、それでもこのような通知が発生します

PHP エラーが発生しました

重大度: 通知

メッセージ: 未定義のインデックス: ファイル

ファイル名: core/Common.php

ライン番号: 364

質問に答えてくれてありがとう

これがダンプされたデータです

array(4) {
  ["function"]=>
  string(5) "index"
  ["class"]=>
  string(7) "Welcome"
  ["type"]=>
  string(2) "->"
  ["args"]=>
  array(0) {
  }
}
4

1 に答える 1

2

'(' . isset(...)は常に に評価されるためtrue設定$debug_info['file']されているかどうかにかかわらず常に評価されます。問題は、条件と操作を連鎖させる方法です。それらを明示的に区切ってグループ化する必要があります。そうしないと、あなたが思っていることをしません。

'(' . (isset(..) ? 'foo' : 'bar') . ( .. ? .. : .. ) . ...
于 2014-04-15T07:33:54.613 に答える