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() 进行判断,但它仍然会导致这样的 NOTICE

遇到 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 回答