在输出到浏览器之前,类属性的内容被清除

时间:2013-06-07 07:44:40

标签: php class

我在一个名为site的类中包含其他无害的东西:

private 
    $notice_type = '',
    $notice_msg = '';

public function setNotice($type,$msg){
    $this->notice_type=$type;   
    $this->notice_msg=$msg;
}

public function notice($what){
    switch($what){
        case 'type': return $this->notice_type; break;
        case 'msg': return $this->notice_msg; break;
    }
}

public function clearNotice(){
    $this->notice_type='';  
    $this->notice_msg='';
}

我已将此类设置为这样的会话: $_SESSION['site'] = new site();

以下是我如何使用它的情景:
提交表格后;我设置了这样的通知:$_SESSION['site']->setNotice('success','success message');,如果是这种情况则会出错,并使用header()将用户重定向到某个地方。

然后我在着陆页上输出这样的信息:
echo $_SESSION['site']->notice('msg');
$_SESSION['site']->clearNotice();

但;当我使用clearNotice() - 函数时,$notice_type$notice_msg的内容会在输出到浏览器之前被清除。

我需要让它保持直到用户以某种方式导航离开页面。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我不知道发生了什么。但不知何故,这个脚本开始按预期工作 我已经一遍又一遍地重写了代码,据我所知,它和以前差不多。但无论如何;这就是现在有效的方法:

网站() - 类:
此类控制通知以及用户设置的设置 - 如数据的优先排序方向和值得记住的选项,以获得更好的用户体验等。

<?php
class site {
    private 
        $notice_type = '',
        $notice_msg = '';

    public function newNotice($type,$msg){
    $this->notice_type=$type;   
        $this->notice_msg=$msg;
    }

    public function notice($what){
    switch($what){
            case 'type': return $this->notice_type; break;
            case 'msg': return $this->notice_msg; break;
    }
    }

    public function clearNotice(){
            $this->notice_type='';  
            $this->notice_msg='';
    }
}
?>

我有一个文档,我通过将一些变量设置为YesNo来配置整个网站 - 在这种情况下:$_SITE_CLASS_site

<?php
#   check to see if session is started
    if(!isset($_SESSION)){session_start();}
//
//  check if site()-class should be activated for this site
    if($_SITE_CLASS_site=='Yes'){
    #   if Yes; prevent resetting the class if it has already been started.
        if(!isset($_SESSION['site'])){$_SESSION['site']=new site();}
    //
    }
//
?>

我已经创建了一个模板,在输出页面内容之前我有这个代码:
基本上只是检查是否有要显示的消息

    <?php if ($_SITE_CLASS_site=='Yes'&&$_SESSION['site']->notice('msg')!=''): ?>
            <div id="site-notice-<?=$_SESSION['site']->notice('type')?>" class="grid_12"><p><?=$_SESSION['site']->notice('msg')?></p></div>
    <?php endif; ?>

然后我加载页面内容,最后我有这个:
通知应该是可见的,直到用户关闭它或离开页面。我不想或不需要保留消息

<?php 
    if ($_SITE_CLASS_site=='Yes'&&$_SESSION['site']->notice('msg')!=''):
        $_SESSION['site']->clearNotice();
    endif;
?>

现在;每当我需要向用户提供有关其操作的反馈时 - 例如,在成功提交表单后 - 我可以在脚本结束时执行此操作:

$_SESSION['site']->newNotice('success','<b>Success!</b> Your request was submitted successfully...');
header('Location '.$_SERVER['HTTP_REFERER']);
exit;

它就像一个魅力......