метод области видимости переменной {foreach {if () {variable} else {}}}

Почему это работает? Я думал, что переменные будут видны только в пределах области видимости ... Или это метод области видимости?

1) В идеале: $ variable-name было бы определено первым шагом с помощью foreach ... но как?
2) почему $ variable определено в предложении if и доступно во всем блоке foreach?
3) в PHPStorm I. получить ошибку компиляции, но код работает ...

ArrayObject __construct:

// read JSON
foreach ($jsonIterator as $key => $val) {

    if ($jsonIterator->getDepth()===0){

        $variable = new Preguntas_Educacion_V1($key);
        $this->offsetSet($variable->getColumn(),$variable);
    } else if ($jsonIterator->getDepth()===1){

        //Reflection!!! call setter dynamically by Val

        $function="set".ucfirst($key);
        $variable->$function($val);
    } else if ($jsonIterator->getDepth()===2){
            //Respuestas array
    }

    $counter++;
}

person Canelo Digital    schedule 17.04.2017    source источник
comment
Если он был установлен на предыдущей итерации, он все равно определен в следующей итерации (он определен до конца скрипта, если unset() или не установлен равным нулю), даже если выполняется другое условие. Если вы хотите прочитать об объемах, это хорошая тема для этого.   -  person Qirel    schedule 17.04.2017


Ответы (1)


"Область видимости переменной - это контекст, в котором она определена. По большей части все переменные PHP имеют только одну область видимости. ... Однако в пользовательских функциях вводится локальная область видимости функции. "1

Таким образом, как только переменная определена (в цикле foreach), она будет видна в последующих итерациях.

Вы можете отключить предупреждения о неопределенных переменных в PHPStorm. Для получения дополнительной информации см. этот ответ.


1 http://php.net/manual/en/language.variables.scope.php

person Sᴀᴍ Onᴇᴌᴀ    schedule 17.04.2017