注意:未定义的索引:XXX - 这真的重要吗?

时间:2010-01-07 09:08:15

标签: php debugging variables

由于我将错误报告级别更改为error_reporting(E_ALL | E_STRICT);,因此我遇到此错误。我可以使用isset()来避免此错误,但代码看起来很难看!


所以我的问题是:如果我回到正常的错误报告设置怎么办?知道某些事情尚未定义真的很重要吗?因为它在没有通知错误的情况下正常工作。

因为我有+10输入,我得到它们:

$username = $_POST['username'];

我还试图在文件的顶部使用它预先定义变量。

$username = null;$username = 0;但它们不起作用。

感谢。

6 个答案:

答案 0 :(得分:10)

重要。错误减慢了PHP的速度,你真的应该设计你的应用程序不要抛出错误。在PHP愉快地继续执行脚本的情况下,许多其他语言将完全死亡。

开发时,您的脚本不应抛出任何错误(即使是E_NOTICE)。

答案 1 :(得分:7)

我建议创建一个简单的函数来获取$ _POST值并为你做检查。

e.g。

<?php
function getPost($key)
{
    return isset($_POST[$key]) ? $_POST[$key] : null;
}

编辑:

显然OP 如何使用它是不明确的:

$username = getPost('username');

答案 2 :(得分:2)

这意味着POST数组中没有密钥'username'。

通常,检查并更正这些内容是个好主意,因为它们可能会连接到应用程序中依赖于缺失值的其他部分。

答案 3 :(得分:2)

这很重要 - 当我在php应用程序中出现奇怪的行为时,错误日志是我看到的第一个地方,十分之九的“未定义的索引”消息直接导致了我的根本原因。

答案 4 :(得分:1)

通知确实有用:它们是检测代码中潜在错误的工具。如果您编写的代码触发了琐碎操作的通知,并且您不愿意更改它,则必须禁用通知报告,从而拒绝有用的工具,使您的工作比所需更加困难。

从历史上看,PHP的设计考虑了极其简单(在旧版本中,你只需要一个带有零行代码的$ username),但随着网络的发展,这种方法被证明是非常不合适的:它只会导致代码不安全,难以维护。

答案 5 :(得分:1)

无论级别如何,都应该解决所有错误的可移植性。

如果您构建的应用程序没有解决严格的错误,并且您的应用程序部署在 具有严格错误报告的服务器上,那么您的应用程序将会很快崩溃。

您最好的选择是检查$ _POST ['username']的存在,然后对该返回值执行独立操作。使用isset()返回值为true或false。

我猜$ _POST ['username']是用于某些描述的身份验证系统吗?因此,如果你的isset()函数返回false,那么你可以显示一个错误,详细说明用户需要用户名。