XAMPP php同时执行if和else部分

XAMPP php同时执行if和else部分,php,laravel,if-statement,session-variables,Php,Laravel,If Statement,Session Variables,真奇怪。我的php代码同时执行if和else部分。下面的代码从尚未设置$\u会话['abc']的位置开始 //echo $_SESSION['abc']; if(!isset($_SESSION['abc'])){ echo "not showing this echo"; $_SESSION['abc'] = "new"; } else { echo " why it jumps here, in XAMPP?"; } 我的实际代码更复杂,所以我做得更简单,如上所述。上述代码没有

真奇怪。我的php代码同时执行if和else部分。下面的代码从尚未设置$\u会话['abc']的位置开始

//echo $_SESSION['abc'];
if(!isset($_SESSION['abc'])){
  echo "not showing this echo";
  $_SESSION['abc'] = "new";
} else {
  echo " why it jumps here, in XAMPP?";
}
我的实际代码更复杂,所以我做得更简单,如上所述。上述代码没有回显“未显示此回显”;即使未设置$\u会话['abc']。如果我注释掉语句
$\u SESSION['abc']=“new”它回显“不显示此回显”

我现在发现:

  • 这只发生在XAMPP中,在生产服务器上,同样工作正常

  • 当我在if块中使else条件为真时,就会发生这种情况。这个条件是设置一个会话变量

  • 我自己认为代码执行了两次或更多,但事实并非如此
  • 更重要的是,“if”条件为true,如果您取消注释第一行
    echo$\u会话['abc'],它将显示未定义的索引错误
  • 对我来说,最奇怪的感觉是,当它到达
    $\u会话['abc']=“new”在“if”块中,它跳到“else”,忽略它前面的回显行
  • 奇怪!!是我遗漏了什么,还是它是一个XAMPP错误。是的,代码在生产服务器上按预期工作

    编辑: 我想补充一点,仅针对这种行为,我还重新安装了XAMPP(最新版本)。 至于“如何知道它是否设置了会话变量,而不回显它前面的行”,它将打印
    echo$\u session['abc'”在else块中,但如果我取消注释第一行
    echo$\u会话['abc'],它将显示未定义的索引错误

    在else块中添加了回显行的代码

    //echo $_SESSION['abc'];
    
    if(!isset($_SESSION['abc'])){
      echo "not showing this echo";
      $_SESSION['abc'] = "new";
    } else {
      echo " why it jumps here, in XAMPP?";
      echo $_SESSION['abc'];
    }
    
    更新2018-06-03 我在拉威尔做上面的代码。我在一个普通的PHP文件中尝试了上述Laravel框架中的代码,它在XAMPP中正常工作。所以新的信息是,这在Laravel-XAMPP组合中不起作用。版本:Laravel 5.4和XAMPP 7.2.5


    现在???

    我不确定你想要实现什么。在将值分配给会话密钥之前,您似乎正在测试$\u会话

    执行打印($会话)以在指定值时变得清晰。以及重新加载会话后存储的值。您还可以打印出语句以查看结果,例如
    echo(!isset(value))

    session_start ();
    
    print_r ($_SESSION);
    
    if (!isset ($_SESSION ['whatever'])){
    
        echo "not set";
        print_r ($_SESSION);
    
    } 
    else {
    
          echo "set";
          print_r ($_SESSION);
    
    }
    
    另外,如果在else块中设置并分配新值,请尝试将第一条语句更改为true

    session_start ();
    
    print_r ($_SESSION);
    
    if (isset ($_SESSION ['whatever'])){
    
        echo "set";
        print_r ($_SESSION);
    
    } 
    else {
    
          echo "not set";
          print_r ($_SESSION);
    
          $_SESSION['whatever'] = "new value";
    
    }
    
    希望它有助于找到错误的地方

    编辑

    一定要使用
    session\u start()
    在第一线

    或设置
    session.auto\u start=1

    在您的php.ini中

    确实不清楚问题出在哪里。标题上写着“同时执行if和else部分”,但是你说“上面的代码没有回音”没有显示这个回音“。那么它是否同时执行两个分支呢?该代码的实际输出是什么?首先它达到
    $\u会话['abc']=“new”
    并设置会话变量,然后跳转到else部分。因此,它同时执行这两个部分,尽管它没有回显if块回显…如果它没有打印任何内容,您如何知道它设置了会话?它几乎不可能以某种方式跳过回显行,但在同一块中执行下一行。@JJJ它会在else块中或之后打印会话变量,但不会在if else之前打印。我在上面的代码中添加了新行。是的,我相信这是不可能的,所以我问这个是为了了解它,否则我的代码已经在生产中运行了。XAMPP出了什么问题?@Asghar如果你是在laravel做这件事,你必须提供完整的代码。这似乎不是一个奇怪的行为,似乎您提供的代码与框架配合得不好。请比较(Localhost、Remote)所有预设(PHP.ini、framework vars等),并检查是否在服务器上部署了正确的代码。还可以在框架或PHP中启用错误报告。如果它不起作用,你必须提供更多的细节。谢谢<代码>回显
    之前,如果else
    已经存在echo
    也已经过测试,并添加到问题中。请参考编辑部分。代码实际上是在线工作的,但不是在XAMPP上。请检查PHP.ini设置和PHP版本,以了解不同之处。另外,当您提供设置时,我可以在XAMPW上重新测试它,但我不确定:在处理$会话时,您是否在第一行使用session_start()?是@Michael I。请检查我在您撰写此评论时所做的更新。您正在使用最新的适用于windows的xampp版本。PHP7.2?