Проблема переменной области с операторами if (PHP) - PullRequest
16 голосов
/ 06 ноября 2010

Хорошо, похоже, у меня неправильное представление о переменной области видимости в 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[]?

Ответы [ 2 ]

66 голосов
/ 06 ноября 2010

If блоки операторов не имеют собственной области видимости. Какие бы данные вы ни присваивали $m, для начала они должны быть пустыми. Попробуйте отладить такие вещи, как ваши $_POST переменные. Кроме того, где определяется $m_id? Может быть, это также пусто.

PHP имеет область действия внутри функций, методов класса и тому подобного. Но if операторы не имеют собственной области видимости. Например, следующий код должен повторить Hi there!:

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

Прочитайте в руководстве .

0 голосов
/ 15 октября 2014

Это правда, что если операторы НЕ имеют области видимости, но кажется, что есть проблема с Scope (фрагмент кода в фигурных скобках) .. в следующем фрагменте кода ожидаемый результат: , $ 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];
    }
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...