Php 变量作用域方法{foreach{if(){variable}else{}

Php 变量作用域方法{foreach{if(){variable}else{},php,variables,scope,arrayobject,Php,Variables,Scope,Arrayobject,为什么这样做有效?我以为变量只在范围内可见。。。还是范围方法 1) 理想情况下:$变量名将在第一步用foreach定义。。。但是怎么做呢? 2) 为什么在整个foreach块中可以访问if子句中定义的$variable? 3) 在PHPStorm中,我得到一个编译错误,但代码可以正常工作 阵列对象构造: // read JSON foreach ($jsonIterator as $key => $val) { if ($jsonIterator->getDepth()==

为什么这样做有效?我以为变量只在范围内可见。。。还是范围方法

1) 理想情况下:$变量名将在第一步用foreach定义。。。但是怎么做呢?
2) 为什么在整个foreach块中可以访问if子句中定义的$variable?
3) 在PHPStorm中,我得到一个编译错误,但代码可以正常工作

阵列对象构造:

// 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变量都只有一个作用域……但是,在用户定义的函数中,引入了局部函数作用域

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

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



1

如果在上一次迭代中设置了它,则在下一次迭代中仍会定义它(除非
unset()
或设置为null,否则它将一直定义到脚本结束),即使满足不同的条件。如果您想阅读有关作用域的内容,请参阅。