PHP函数 - 注意:未定义的变量问题

时间:2011-05-14 09:18:53

标签: php function

我创建了两个函数,这两个函数在我将它们转换为函数之前用于工作,现在我得到以下错误Notice: Undefined variable: link, url and depth,我想知道如何解决这个问题以便它们可以正常工作。问题来自最后一段代码allCategories($link[0], $url, 0, $depth+1);,我认为它源于第二个函数。

功能1

function allCategories($parent = 0, $parent_url = '', $count = 0, $depth = 0){
    catQuery();
    global $link;           
    if($count == 0){
        echo '<ol>';
    } else {
    echo '<ol>';
    }

    foreach ($parent as $id => $cat) {
    if($cat['parent_id'] == '0'){
            $url = $parent_url . $cat['url'];
            $url = str_replace('&#063;cat=', '', $url);
            echo '<li><a href="http://www.example.com/cat/' . strip_tags($url) . '" title="' . strip_tags($cat['category']) . ' Category Link" class="category-headers">' . strip_tags($cat['category']) . '</a>';          
    } else {
            $indent = str_repeat('&nbsp; ', $depth * 1);
            $url = $parent_url . $cat['url'];
            $cat_num = array('&#063;cat=','&#038;sub1=','&#038;sub2='');
            $url = str_replace($cat_num, '/', $url);
            echo '<li>' . $indent . '<a href="http://www.example.com/cat/' . strip_tags($url) . '" title="' . strip_tags($cat['category']) . ' Category Link">' . strip_tags($cat['category']) . '</a>';
    }

        if(isset($link[$id])) {
            allCategories($link[$id], $url, $count+1, $depth+1);
    }               
            echo '</li>';
    }       
    echo '</ol>';
}

功能2

function catQuery(){
    $cat_dbc = mysqli_query(database(),"SELECT * FROM categories ORDER BY parent_id, category LIKE '%more%', category ASC");
    if (!$cat_dbc) {
            trigger_error(mysqli_error(database()));
    }

    $link = array();
    while(list($id, $parent_id, $category, $url, $depth) = mysqli_fetch_array($cat_dbc)){
            $link[$parent_id][$id] = array('parent_id' => $parent_id, 'category' => $category, 'url' => $url, 'depth' => $depth);
    }
}

显示所需的输出。

allCategories($link[0], $url, 0, $depth+1);

2 个答案:

答案 0 :(得分:2)

答案编写不尝试访问未定义变量的代码。如果您是初学者,可能需要阅读最近关于PHP5的书。

在第二个功能中,您忘记了global $link;。但是,在您的第一个函数中更好return $link;并使用$link = catQuery();而不是滥用全局变量

对于其他未定义的变量..在调用$link之前,您是否定义了$url$depthallCategories($link[0], $url, 0, $depth+1);

答案 1 :(得分:1)

像这样改变函数catQuery的结尾

    while(list($id, $parent_id, $category, $url, $depth) = mysqli_fetch_array($cat_dbc)){
            $link[$parent_id][$id] = array('parent_id' => $parent_id, 'category' => $category, 'url' => $url, 'depth' => $depth);
    }
   return $link;
}

然后像这样改变allCategories函数的开头

function allCategories($parent = 0, $parent_url = '', $count = 0, $depth = 0){
    $link = catQuery();
    // global $link;           
    if($count == 0){

它不起作用的原因是你需要有“全球$ link”。在每个函数中定义。但全局变量不是好习惯,所以最好从catQuery函数返回$ link,然后在allCategories函数内部使用它