Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
注意:php中未定义的索引错误可以通过这种方式修复吗?_Php - Fatal编程技术网

注意:php中未定义的索引错误可以通过这种方式修复吗?

注意:php中未定义的索引错误可以通过这种方式修复吗?,php,Php,我的任务是完成一个项目,我学校的三位前学生一直在做这个项目,我没有办法联系前两位正在做这个项目的学生,而且由于它现在已经启动并运行,我没有办法根据现实情况测试这个系统,而现实情况可能不是最好的测试服务器。现在,前两个编写的错误报告脚本中有一个错误,这是一个通知:第73-75行的未定义索引行如下所示: $text .= $t['file'] . "\n"; $text .= $t['line'] . "\n"; $text .= print_r($t['file'], 1) . "\n"; 第7

我的任务是完成一个项目,我学校的三位前学生一直在做这个项目,我没有办法联系前两位正在做这个项目的学生,而且由于它现在已经启动并运行,我没有办法根据现实情况测试这个系统,而现实情况可能不是最好的测试服务器。现在,前两个编写的错误报告脚本中有一个错误,这是一个通知:第73-75行的未定义索引行如下所示:

$text .= $t['file'] . "\n";
$text .= $t['line'] . "\n";
$text .= print_r($t['file'], 1) . "\n";
第72行是这样的:

$text .= ((isset($t['type']) && isset($t['object'])) ? print_r($t['object'], true) . $t['type'] . $t['function'] : $t['function']) . "\n";
$text .= if((isset($t['type']) && isset($t['object'])) ? print_r($t['object'], true) . $t['type'] . $t['function'] : $t['function']) . "\n";
所以我想知道的是,如果在第72行添加一个if语句,问题是否会得到解决,如下所示:

$text .= ((isset($t['type']) && isset($t['object'])) ? print_r($t['object'], true) . $t['type'] . $t['function'] : $t['function']) . "\n";
$text .= if((isset($t['type']) && isset($t['object'])) ? print_r($t['object'], true) . $t['type'] . $t['function'] : $t['function']) . "\n";

已经有一个三元运算符:

$var = (a == b) ? 'yes' : 'no';
如果a==b,则$var='yes'否则$var='no'

然后

if (isset($t['type']) && isset($t['object'])) {
    $text .= print_r($t['object'], true) . $t['type'] . $t['function'];
} else {
    $text .= $t['function'];
}

下一步将是更好的检查:

if( isset( $t['file'] ) ) {
    $text .= $t['file'] . "\n";
}

if( isset( $t['line'] ) ) {
    $text .= $t['line'] . "\n";
}

if( isset( $t['file'] ) ) {
    $text .= print_r($t['file'], 1) . "\n";
}
这段代码更容易阅读

但是我建议检测索引未定义的原因。这可能会导致其他更严重的逻辑错误


如果在长时间的良好工作后出现这些通知和警告,则切勿以这种方式抑制这些通知和警告。首先,您必须检测它们出现的原因。

这并不能解决您的问题。行的
(tests)
部分已经是
if
语句。有关详细信息,请参阅本页:(不是我的页)不要在这样复杂的条件下使用三元运算符。这是不值得的可维护性折衷为光滑和代码行较少。这个问题只存在于使用日志功能时,但当在屏幕上打印错误作为调试时,我没有得到这个错误,至少我的理解是,这意味着有一些错误与日志记录,而不是是的,我理解你是如何得到这个通知的,请参阅我在其他答案中关于闭包的评论:)谢谢这正好解释了他们是如何做到的,现在我只需要理解他们为什么这样做,以及其他的错误:)他们没有检查
$t['file']
$t['file']
,因为他们假定键
文件
始终在数组中。但是闭包(这是PHP中相对较新的特性)可以改变这一假设。我不知道是否有其他方法可以在没有
文件
键的情况下接收回溯项。好吧,所以他们(正如我…)假设文件和行永远不会是空的,因为如果他们认为回溯项很难,甚至不可能,这将导致日志记录无效,但是如果这是真的,那么也会有一些错误被记录下来,但是如果我按照另一个答案中的建议去做的话,这些错误不会包含所有的信息。这将使我有更好的机会解决导致日志记录尝试记录某些内容的原因。