变量范围方法{foreach {if(){variable} else {}}}

时间:2017-04-17 18:18:17

标签: php variables scope arrayobject

为什么这样做?我认为变量只能在范围内可见......或者是范围方法?

1)理想情况下:$ variable-name将用foreach定义第一步......但是如何?
2)为什么在整个foreach块中可以访问if子句中定义的$变量?
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++;
}

1 个答案:

答案 0 :(得分:1)

  

" 变量的范围是定义它的上下文。在大多数情况下,所有PHP变量只有一个范围。 ...但是,在用户定义的函数中引入了局部函数范围。" 1

因此,一旦定义了变量(在 foreach 循环中),它将在后续迭代中可见。

您可以在PHPStorm中禁用有关未定义变量的警告。有关详细信息,请参阅this answer

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