PHP By Reference变量

时间:2013-09-07 10:05:16

标签: php pass-by-reference

我是一名.net程序员,最近决定检查PHP,到目前为止我必须说它非常有趣。

我使用WAMPServer处理PHP,并且在使用引用变量时遇到问题。

这是我正在使用的代码:

function drawCategories($parent_id, $catlistids="",$level=0,$selected="") {
    global $USERLANG;
$result = mysql_query("
    SELECT 
        BPPENNYAUTOBID_categories.cat_id,
        BPPENNYAUTOBID_cats_translated.cat_name 
    FROM
        BPPENNYAUTOBID_categories 
            INNER JOIN BPPENNYAUTOBID_cats_translated ON BPPENNYAUTOBID_categories.cat_id=BPPENNYAUTOBID_cats_translated.cat_id
    WHERE
        BPPENNYAUTOBID_cats_translated.cat_name!='' 
        AND BPPENNYAUTOBID_categories.parent_id='".$parent_id."' 
        AND BPPENNYAUTOBID_cats_translated.lang='".$USERLANG."' 
    ORDER BY 
        BPPENNYAUTOBID_categories.cat_name"
);

    while ($line = mysql_fetch_array($result)) {
        if($catlistids != "") { $catlistids .= "<br />"; }
        $spaces = "";
        for($i=0;$i<$level;$i++) $spaces .="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
        $catlistids .= "<option value='".$line['cat_id']."' ".($selected==$line['cat_id'] ? " selected ":"").">".$spaces.$line["cat_name"]."</option>";


        drawCategories($line["cat_id"], &$catlistids,$level+1,$selected);
 }
 return $catlistids;
}

当我第二次通过引用传递变量$ catlistids时调用drawCategories函数然后所有网站内容消失,我没有得到任何类型的错误,但我想这与WAMP服务器定义有关。

有人可以帮我解决这个问题吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

函数调用上没有引用符号 - 仅在函数定义上。单独的函数定义足以通过引用正确传递参数。从PHP 5.3.0开始,您会收到一条警告,指出当您使用&amp;时,不推荐使用“call-time pass-by-reference”。在foo(&$a);。从PHP 5.4.0起,删除了调用时传递引用,因此使用它会引发致命错误。

您可以通过引用函数传递变量,以便函数可以修改变量。从函数调用中删除&并尝试这种方式:

function drawCategories($parent_id, &$catlistids="", $level=0, $selected="") {
                                  //^