php未定义变量:article_id

时间:2010-03-23 14:18:01

标签: php undefined

我一直把这个作为一个警告,我希望避免在没有关闭警告的情况下获取此警告

这是上下文

  $url_items = array("foo");
  $article_id = db_escape($url_items[1]);
  $article = get_article($article_id);

  function get_article($article_id = NULL) {.....}

6 个答案:

答案 0 :(得分:3)

我认为最简单的解决方法是这样的:

$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:修改以避免未定义的偏移警告。

答案 1 :(得分:1)

您没有准确说明导致错误的行,但您应该使用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
    }
}

答案 2 :(得分:0)

将此代码放在代码之前:

error_reporting(E_ALL ^ E_NOTICE);

PHP Manual: error_reporting

答案 3 :(得分:0)

所以这一切都很简单,是的,也许我可以更好地表达我的问题,但仍然困扰我,没有更简单的方法来做到这一点

    if (isset($url_items[1])){
        $article_id = db_escape($url_items[1]);
    }else{
        $article_id = null;
    }
    $article = get_article($article_id);

答案 4 :(得分:-1)

我认为这将是一个更好的方式,也许有更好的方法,但我认为隐藏警告是错误的方式......

$article_id = db_escape($url_items[1]);
if(empty($article_id)){
    $article_id = null;
}

编辑更正了代码

答案 5 :(得分:-1)

我不知道这是否与错误有关,但你应该知道PHP索引数组从0开始,所以第二行应该是

$article_id = db_escape($url_items[0]);

此外,它可能是一个错字,但第一行应该是

var $url_items = array("foo");