好吧我似乎对PHP的变量作用域有个误解,原谅我缺乏这个主题,因为我来自Java,C#背景。思考我可以使变量可以被函数访问,或者如果声明简单地放在函数之外。下面是什么,我试图完成一个片段:if语句的变量作用域问题(PHP)
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
}
现在我想要做的是使$m
变量值外部访问的if语句其在$sql_array[]
语句中使用的$m
变量。在C#中,我只需在foreach循环外部声明一个变量并能够使用它。在对这个问题进行一些阅读之后,我发现使用全局或GLOBALS关键字只有在我的全局范围变量在foreach之前赋值时声明global $m
才能在循环中获取该值。但是用我现在的代码$m
在if语句中是一个局部范围,每个人都不鼓励使用它们。现在有没有更好的方法可以使$m
访问$sql_array[]
声明?
这是什么意思:'id *会*来了吗?' – 2010-11-05 22:01:02
ID的来源将是... – 2010-11-05 22:04:53
@ Aurel300谢谢你先生。翻译。你能告诉运行时的实际$ m_id值吗? – 2010-11-05 22:10:59