【问题标题】:Why PHP variables are persistent within loop cycles?为什么 PHP 变量在循环周期内是持久的?
【发布时间】:2016-11-03 18:07:19
【问题描述】:

以下代码不应该像我知道的任何其他语言(C、C++、C# 等)那样执行

<?php

$do = true;

for($i=0; $i<3; $i++) {
    if($do===true) {
        $some_variable = 666;
        echo $some_variable;
        $do = false;
    }
    if(isset($some_variable)) {
        echo $some_variable;
    }
}

为什么 PHP 不会在下一次循环迭代中取消设置 $some_variable

【问题讨论】:

标签: php variables scope


【解决方案1】:

因为它是在全局范围内设置的。一旦第一次迭代设置它,变量就会保持设置。

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

在这里,您可以将工作移动到具有自己作用域的函数中。第一次迭代后$do设置为false,不再设置变量:

$do = true;

function do_thing() {
    global $do;
    if($do===true) {
        $some_variable = 666;
        echo $some_variable;
        $do = false;
    }
    if(isset($some_variable)) {
        echo $some_variable;
    }
}

for($i=0; $i<3; $i++) {
    do_thing();
}

【讨论】:

    【解决方案2】:

    或者,您可以确保在第一次迭代中取消设置 $some_variable

    <?php
    
    $do = true;
    
    for($i=0; $i<3; $i++) {
    
        if($do===true) {
            $some_variable = 666;
            // echo $some_variable;
            $do = false;
        }
        if(isset($some_variable)) {
            echo $some_variable;
            unset($some_variable);
        }
    
    }
    
    ?>
    

    关键是,由于您在循环的第一次运行中创建了 $some_variable,它将在循环的所有后续运行中可用,除非您再次专门取消设置它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      相关资源
      最近更新 更多