Почему это работает? Я думал, что переменные будут видны только в области видимости … Или это метод области видимости?
1) В идеале: $ variable-name будет определен первым шагом с foreach … но как?
2) почему переменная $, определенная в предложении if, доступна во всем блоке foreach?
3) в PHPStorm я получаю ошибку компиляции, но код работает …
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++;
}
«Область действия переменной — это контекст, в котором она определена. По большей части все переменные PHP имеют только одну область видимости. … Однако в пользовательских функциях вводится локальная область функций.«1
Таким образом, как только переменная определена (в для каждого loop) это будет видно в последующих итерациях.
Вы можете отключить предупреждения о неопределенных переменных в PHPStorm. Для получения дополнительной информации см. этот ответ.
Других решений пока нет …