我不断收到这是一个警告我要避免收到此警告,当它是头也不回警告关闭PHP未定义的变量:article_id的
这里不确定的是在这之前你的代码放在上下文
$url_items = array("foo");
$article_id = db_escape($url_items[1]);
$article = get_article($article_id);
function get_article($article_id = NULL) {.....}
我不断收到这是一个警告我要避免收到此警告,当它是头也不回警告关闭PHP未定义的变量:article_id的
这里不确定的是在这之前你的代码放在上下文
$url_items = array("foo");
$article_id = db_escape($url_items[1]);
$article = get_article($article_id);
function get_article($article_id = NULL) {.....}
我认为最简单的方法来解决这个问题是这样的:
$url_items = array("foo");
$article = empty($url_items[1]) ? get_article() : get_article(db_escape($url_items[1]));
function get_article($article_id = NULL) {.....}
这应该工作,因为你给$article_id
一个默认值的函数。但是,如果不存在$article_id
,如果完全不想执行,则可以轻松地将中间三元组更改为null。
编辑:如果你有一个article_id的0,你可能要更改empty
到!isset
编辑2:修改,以避免不确定的偏移警告。
这是完全错误的,但尤其是在这种情况下。为什么不E_ALL? – 2010-03-23 14:22:47
,因为E_ALL仍然会显示错误? – Iraklis 2010-03-23 14:25:38
Ahaha,我以为你会帮助找到错误,而不是隐藏它:)它只是没有出现在我的脑海里。开发者多么荒谬的答案。 – 2010-03-23 14:28:29
我认为这将是一个更好的方式也许有一个更好的办法,但我认为只是隐藏警告是错误的方式...
$article_id = db_escape($url_items[1]);
if(empty($article_id)){
$article_id = null;
}
编辑纠正代码
您不会确切地说哪一行导致错误,但您应该使用isset
来表示您不确定存在的任何变量。例如:
$url_items = array("foo");
if (isset($url_items[1]))
{
$article_id = db_escape($url_items[1]);
$article = get_article($article_id);
}
function get_article($article_id = NULL) {.....}
您还需要检查db_escape
方法的内容,在情况下做的也有不确定变量的东西。
解决此问题的另一种方式是通过使用参考的&
变量传递给函数:
function get_article(&$article_id) {
if ($article_id == null) {
// handle null case here
}
else {
// get the article
}
}
稀释是,但我可能是一个问题仍然需要打电话给get_article,即使$ article_id没有设置 – mcgrailm 2010-03-23 14:58:05
@ mmcgrail:是的我给你的代码尝试,但没有得到任何警告。但我确实得到了'注意:未定义偏移:1'。我唯一一次得到“未定义变量”是,如果我删除设置'$ article_id'的行。你确定你的代码和你上面发布的一样吗?发布'db_escape()'的内容也会有所帮助。 – DisgruntledGoat 2010-03-23 15:03:20
是的,你的权利我也得到了一个,我仍然无法看到db_escape与它有什么关系。但这确实使我得到了答案 – mcgrailm 2010-03-23 15:12:10
所以它毕竟是非常简单的,是的,也许我可以更好地表述我的问题,但它仍然困扰着我,有没有做到这一点
if (isset($url_items[1])){
$article_id = db_escape($url_items[1]);
}else{
$article_id = null;
}
$article = get_article($article_id);
一个更简单的方式很奇怪,因为'$ article_id = db_escape($ url_items [1]);'应该为'$ article_id'赋值。我认为警告甚至不应该发生(或者它在你的代码中的其他地方)。 – 2010-03-23 14:21:27
嗯你的权利没有提到这一点......我不熟悉db_escape()是否会返回一些东西呢?或更好的它总是会返回一些东西...嗯好吧,只是测试它的功能将返回null如果没有返回,所以这个函数怎么可能返回任何东西? – Nexum 2010-03-23 14:35:16
PHP通常在发出警告时提供文件和行号。这不应该足以发现问题吗? – lunohodov 2010-03-23 14:35:48