if语句的可变范围问题(PHP)

And*_*dre 16 php scope if-statement

好吧,我似乎对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 
}
Run Code Online (Sandbox Code Playgroud)

现在我要做的是使$m变量值在if语句之外可以访问语句中使用的$m变量$sql_array[].在C#中,我只是在foreach循环之外声明一个变量并且能够使用它.在对此事进行一些阅读之后,我发现使用全局或GLOBALS关键字只有在我的全局范围变量在foreach之前赋值并声明global $m在循环内获取该值时才会起作用.但是我的当前代码$m是if语句中的本地范围,并且每个人都不鼓励使用它们.现在,是否有更好的方法$m可以使$sql_array[]声明访问?

Ste*_*hen 66

If语句块没有自己的范围.无论您分配给哪种数据,都$m必须为空.尝试调试$_POST变量之类的东西.还有,在哪里$m_id定义?也许它也是空的.

PHP 确实在函数,类方法等有作用域.但是if声明没有自己的范围.例如,以下代码将回显Hi there!:

$bool = true;
if ($bool) {
    $new_var = 'Hi there!';
}
echo $new_var;
Run Code Online (Sandbox Code Playgroud)

请阅读手册.