【问题标题】:session based messages not working in classes基于会话的消息在类中不起作用
【发布时间】:2014-08-24 06:21:07
【问题描述】:

我有一个 requires 几个类的主文件 (framework.php)。为简单起见,我们只假设带有 Messages 类的消息,并使用 Automate 类自动化。消息类存储用户刷新页面时在前端显示的会话消息等。当我在Automate 中添加消息时,我通过$msg = new Messages; $msg->add('s', 'Hello World!'); 这样做但是每次我想添加$msg 时我都会重复$msg = new Messages,因为这很混乱,我只想调用一次类。所以我像这样在构造函数中初始化类:

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.

更新: 我已经通过在消息类中注释掉clear 函数来确定消息正在被添加。似乎该变量在显示之前就被取消设置了。

【问题讨论】:

  • 如何通过 getter 从 Automate 类外部访问 $msg 变量?
  • $msg = new Messages();请记住消息存储在会话变量中(参见脚本)
  • 您可以尝试在您的Messages::clear() 方法中使用debug_print_backtrace(),以查看实际调用它的时间和原因。
  • 感谢这个小功能!不知道这件事。我得到:#0 Messages->clear() 在 [C:\xampp\htdocs\fagard_designs\neou_cms\framework\classes\messages.php:114] 调用 #1 Messages->display() 在 [C:\xampp \htdocs\fagard_designs\neou_cms\update_pages.php:20]
  • 这是否意味着 clear 在显示之前被调用?我的意思是这没有意义,它只会在显示结束时被调用!

标签: php class session


【解决方案1】:

我在研究 OOP 实践后发现了这一点。我通过以下方式将消息类设为单例:

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 一直被调用的原因!

【讨论】:

    猜你喜欢
    • 2019-12-14
    • 2023-04-03
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2021-04-23
    • 2011-08-26
    • 2013-05-03
    • 2012-10-06
    相关资源
    最近更新 更多