if 语句的变量作用域问题 (PHP)

2022-08-30 20:14:41

好吧,我似乎对PHP的可变范围有误解,原谅我缺乏这个主题,因为我来自Java,C#背景。认为我可以使变量可供函数访问,或者只需将其放在其外部即可使if语句访问。以下是我试图完成的一个片段:

foreach ($nm as $row=>$im) {
    $itm_name = $im;
    $lnk = $lnk_cty[$row];  
    if($mode == 'addMenu') {
        $m = $m_id; //id will be coming from fresh insert of menu_name 
    } else {
        $m = $_POST['mnu_add'][$row];
        echo "MENU_ID: ".$m;
    }
    if($mode == 'addCat') {
        $m = $c_id; //id will be coming from fresh insert of cat_name
    } else {
 $m = $_POST['cat_add'][$row];
    }
    //used for testing purposes
    echo "item name: ".$itm_name ."<br />";
    echo "lnk: ".$lnk ."<br />";
    echo "m: ".$m ."<br />"; //$m is empty here, because its a new declaration as oppose to accessing $m value from if statement
    $display_fields .= "<li>".$itm_name." ".$item."</li>";
    $sql_array[] = '("' . $itm_name . '", "' . $lnk . '",  ' . $m . ')';  // Add a new entry to the queue 
}

现在,我试图做的是使变量值在 if 语句之外可访问,该变量值位于语句中使用的变量中。在 C# 中,我只需在 foreach 循环之外声明一个变量,并能够使用它。在对此事进行了一些阅读之后,我发现只有当我的全局范围变量在foreach之前分配值并在循环中获取该值时,使用global或GLELS关键字才有效。但是,我目前的代码在if语句中具有本地范围,每个人都不鼓励使用它们。现在,有没有更好的方法来使语句易于访问?$m$m$sql_array[]global $m$m$m$sql_array[]


答案 1

If语句块没有自己的作用域。要分配到的任何数据都必须为空。尝试调试变量等内容。另外,在哪里定义?也许它也是空的。$m$_POST$m_id

PHP函数,类方法等内部确实有范围。但声明没有自己的范围。例如,以下代码将回显:ifHi there!

$bool = true;
if ($bool) {
    $new_var = 'Hi there!';
}
echo $new_var;

阅读手册


答案 2

推荐