好吧我似乎对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
}
现在我要做的是让$m
变量值在if语句之外可以访问$m
语句中使用的$sql_array[]
变量。在C#中,我只是在foreach循环之外声明一个变量并且能够使用它。在对此事进行一些阅读后,我发现使用全局或GLOBALS关键字只有在我的全局范围变量在foreach之前赋值时,并且声明global $m
在循环内获取该值时才能使用。但是我的当前代码$m
属于if语句中的本地范围,并且每个人都不鼓励使用它们。现在,是否有更好的方法使$m
语句可以访问$sql_array[]
?
答案 0 :(得分:65)
If
语句块没有自己的范围。无论您分配给$m
的数据是什么,都必须为空。尝试调试$_POST
变量之类的内容。此外,$m_id
在哪里被定义?也许它也是空的。
PHP 确实在函数,类方法等中具有范围。但是if
语句没有自己的范围。例如,以下代码将回显Hi there!
:
$bool = true;
if ($bool) {
$new_var = 'Hi there!';
}
echo $new_var;
阅读manual。
答案 1 :(得分:-1)
if语句没有范围,但是看起来Scope有问题(大括号中的代码段)..在下面的代码片段中,预期的结果是:$ z [0] = 0 ,$ z [1] = 1,但获得的实际输出是$ z [0] = 100;并且$ z [1]未定义。使用的PHP来自Apache Friends发行版
<?php
$x = 0;
$y = 1;
$z[0]=100;
if($x!=0){
$z[0]=1;
$z[1]=2;
$z[2]=3;
$z[3]=4;
}else{
if($y == 0){
$a =1;
}else{
global $z;
echo $z[0];
echo $z[1];
}
}
?>