2010-01-07 54 views
4

由于我将错误报告级别更改为error_reporting(E_ALL | E_STRICT);,因此我正面临此错误。我可以使用isset()避免这个错误,但代码看起来非常难看!注意:未定义索引:XXX - 真的很重要吗?


所以我的问题是:如果我回到正常的错误报告设置该怎么办?知道某些东西还没有定义真的很重要吗?因为它没有通知错误就可以正常使用。

,因为我有+10的投入,我让他们这样的:

$username = $_POST['username']; 

我也试图预先定义在该文件的顶部使用这个变量。

$username = null; and $username = 0;但他们不工作。

谢谢。

回答

10

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

开发时,脚本不应该抛出任何错误(甚至是E_NOTICE)。

+1

+1是的。我也这么想。为什么我使用错误报告是因为我在博客文章中读到,开发人员应该知道他们的脚本到底发生了什么。但是在这样的情况下,我没有时间。 – MoeAmine 2010-01-07 09:22:03

7

我会建议创建一个简单的函数来获取$ _POST值并为您进行检查。

例如

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

编辑:

显然,这是不明确的OP 如何使用此:

$username = getPost('username'); 
+0

+1,甚至比$ username = isset($ _ POST ['username'])更好? $ _POST ['username']:false; – r3zn1k 2010-01-07 09:15:30

+3

对于丢失的键您最好返回null而不是false - 键值可能与false值一起存在。 – 2010-01-07 09:17:06

+0

@adam你是正确的 – hobodave 2010-01-07 09:19:00

2

这意味着在POST数组中没有关键的 '用户名'。

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

+0

中取回那样微不足道,这意味着关键的'用户名'(或等价物)是未定义的 – 2010-01-07 09:16:22

+0

这是狡辩。 – Gordon 2010-01-07 09:27:04

+2

但是你不必检查isset。 PHP提供了array_key_exists,不管实际价值如何,它都完全符合它的要求,Gordon也没有提出任何暗示使用其中一个的建议。这*确实使它变得狡猾。 – 2010-01-07 09:46:34

1

声明确实有一个目的:它们是检测代码中潜在错误的工具。如果您编写触发平凡操作通知的代码,并且您不愿意更改它,则必须禁用通知报告,从而拒绝有用的工具,并使您的工作比所需更难。从历史上看,PHP的设计极其简单(在旧版本中,你只需要一个$用户名,可用零行代码),但是这种方法在网络演化中证明是非常不合适的:它只会导致代码不安全,难以维护。

2

它确实很重要 - 当我在一个PHP应用程序中出现奇怪的行为时,错误日志是我看起来的第一个地方,十个中有九个是“UNDEFINED INDEX”消息,直接导致了根本原因。

1

所有的错误都应该被解决,不管级别如何,便携性。

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

最好的办法是检查$ _POST ['username']是否存在,然后独立执行该返回值。使用isset()您的返回值可以是true或false。

我猜$ _POST ['用户名']是用于一些描述的身份验证系统?因此,如果您的isset()函数返回false,那么您可能会显示一个详细信息给用户的错误,该用户名是必需的。