PHP - unset 函数在我的代码之前取消设置我的 var

Posted

技术标签:

【中文标题】PHP - unset 函数在我的代码之前取消设置我的 var【英文标题】:PHP - unset function unsets my var before my code 【发布时间】:2016-04-08 16:20:00 【问题描述】:

我想使用 unset 函数清除我的会话 vqriqble “flash”,但现在我无法打印我的 flash 消息,因为在我之前的代码之前调用了 unset 函数。 它在我的标题模板中被调用:header.php 在代码开头的每个页面中被调用。

这是代码:

<?php if(isset($_SESSION['flash'])): ?>
  <?php foreach($_SESSION['flash'] as $type => $message): ?>
    <div class="alert alert-<?= $type; ?> bk-fullwidth-alert">
      <p><?= $message; ?></p>
    </div>
  <?php endforeach; ?>
  <?php unset($_SESSION['flash']); ?>
<?php endif; ?>

谢谢大家的帮助!

【问题讨论】:

在循环之后取消设置...? 【参考方案1】:

试试这个。问题是 unset() 在循环内部,所以变量在第一次循环执行时被取消设置。

<?php if(isset($_SESSION['flash'])): ?>
  <?php foreach($_SESSION['flash'] as $type => $message): ?>
    <div class="alert alert-<?= $type; ?> bk-fullwidth-alert">
      <p><?= $message; ?></p>
    </div>
  <?php endforeach; ?>
  <?php unset($_SESSION['flash']); ?>
<?php endif; ?>

编辑:试试这个

<?php
    if(isset($_SESSION['flash'])) 
        $flash = $_SESSION['flash'];
        unset($_SESSION['flash']);
        foreach($flash as $type => $message) 
            ?>
            <div class="alert alert-<?=$type?> bk-fullwidth-alert">
                <p><?=$message?></p>
            </div>
            <?php
        
    
?>

【讨论】:

抱歉,我倒置了两行,因为我正在测试代码但它不起作用...... 如果我删除未设置的功能,我的代码工作正常。 这很奇怪,这段代码对我来说很好用。但是,作为一种解决方法,您可以执行$flash = $_SESSION['flash']; unset($_SESSION['flash']);,然后仅使用 $flash 变量而不是 $_SESSION['flash'] 来查看它是否有效。现在,just for curiousity,您的 register_globals 在 php.ini 上是打开还是关闭? 这是上面的代码,您可以在线运行:phpfiddle.org/main/code/v1yz-w5dn 当您在服务器上运行这段代码时,它会产生类似的结果吗? 正如 PHP 官方网站上的“register_globals”手册页所说:此功能自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已删除。

以上是关于PHP - unset 函数在我的代码之前取消设置我的 var的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中取消设置全局变量?

取消设置 mysql_fetch_field 对象值 MYSQL PHP

为啥不会/如何对 PHP 会话变量进行排序而不是取消设置

php中特定索引处的JSON未设置元素

取消设置 php 参考

为啥我需要在 foreach 循环后取消设置 $value