Хорошо, у меня, похоже, есть неправильное представление с переменной областью с PHP, простите мою нехватку предмета, поскольку я исхожу из фона Java, C #. Думая, что я могу сделать переменные доступными для функций или если заявления просто, поместив их за пределы. Ниже приведен фрагмент того, что я пытаюсь выполнить:
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 и могу ее использовать. После некоторого чтения по этому вопросу я обнаружил, что использование ключевых слов global или GLOBALS будет работать только в том случае, если моя глобальная переменная сферы присваивает значение перед foreach и объявляет global $m
для получения этого значения в цикле. Но с моим текущим кодом $m
является локальной областью внутри операторов if, и все не рекомендуют использовать их. Теперь, есть ли лучший способ сделать $m
доступным для $sql_array[]
?
If
блоки операторов не имеют собственного объема. Независимо от того, какие данные вы присваиваете $m
, для начала нужно быть пустым. Попробуйте отладить такие вещи, как переменные $_POST
. Кроме того, где определено $m_id
? Возможно, он тоже пуст.
PHP имеет область внутри функций, методов класса и т. П. Но if
утверждения не имеют собственного объема. Например, следующий код будет эхом Hi there!
:
$bool = true; if ($bool) { $new_var = 'Hi there!'; } echo $new_var;
Прочтите в руководстве .
здесь переменная $ id_struct не установлена, что мне делать?
if(!$struct_req) { mysql_query("insert into structure values (null, 3,'".$_POST["structure"]."')") or die("insert structure : ". mysql_error()); if(isset($id_struct)) echo "isset <br>"; $id_struct = mysql_insert_id(); }else { //global $id_struct; $id_struct = mysql_fetch_array($struct_req)["id_structure"]; } echo $id_struct;
Это правда, что если утверждения НЕ имеют области видимости, но кажется, что существует проблема с областью (фрагмент кода в фигурных скобках) .. в приведенном ниже фрагменте кода ожидаемый результат: $ 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]; } } ?>