基于会话的消息不在类中工作

时间:2014-08-24 06:21:08

标签: php class session

我有一个主文件(framework.php),require是几个类。为了简化我的问题,我们假设只有类Messages的消息,并使用类Automate自动化。 messages类存储在用户刷新页面时向前端显示的会话消息。等等。当我在Automate中添加邮件时,我会通过$msg = new Messages; $msg->add('s', 'Hello World!');这样做。但是每次我想添加$msg = new Messages时我都会重复$msg,因为这很麻烦,我想要只需打电话给班级一次。所以我在构造函数中初始化类,如下所示:

class Automate
{
    protected $msg;
    //public $connection;
    public $cke;
    public $debug = false;
    public $disallow_insert;
    public $bImgUp = BACKEND_IMAGE_UPLOAD_PATH;
    public $fImgUp = FRONTEND_IMAGE_UPLOAD_PATH;
    public function __construct() {
        global $disallow_insert;
        $this->disallow_insert = $disallow_insert;
        $this->cke = (bool) self::ckeCheck();
        $this->msg = new Messages();

    }

并在我的主文件中添加$msg = new Messages();,这样我就可以调用显示函数echo $msg->display();

然而,这种方法不起作用(没有错误,但仍然),唯一可行的方法是在每次添加或显示之前初始化$msg = new Messages();。我做错了什么?

我应该提到我正在使用this session based message script.

更新: 我已经确定通过在messages类中注释掉clear函数来添加消息。看起来似乎变量在显示之前没有被设置。

1 个答案:

答案 0 :(得分:0)

我在研究OOP实践后想通了。我通过以下方式将消息类设为singelton:

public static function getInstance()
{
    static $instance = NULL;
    if (NULL === $instance) {
        $instance = new static();
    }

    return $instance;
}

和我的班级

var $msg;
public function __construct() {
    $this->msg = Messages::getInstance();
}

我认为需要构造一次的消息类,而不是多次,这就是函数clear被调用的原因!

相关问题