最好的携带方式通过各种实例和函数修改变量?

时间:2010-06-03 00:00:28

标签: php global-variables session-variables

我正在寻找实现消息/通知系统的“最佳实践”方式。我正在使用基于OOP的方法编写脚本,并希望按照以下方式执行操作:

if(!$something)
   $messages->add('Something doesn\'t exist!');

messages类中的add()方法看起来像这样:

class messages {
   public function add($new) {
      $messages = $THIS_IS_WHAT_IM_LOOKING_FOR; //array

      $messages[] = $new;
      $THIS_IS_WHAT_IM_LOOKING_FOR = $messages;
   }
}

最后,有一种方法可以读出$ messages并将每条消息作为格式良好的HTML返回。

所以问题是 - 我应该为$THIS_IS_WHAT_IM_LOOKING_FOR使用什么类型的变量?

  • 我不想让这个使用数据库。每次只查询运行时发生的一些消息并在5秒后消失,看起来就像是过度杀戮。
  • 使用全局常量显然是最糟糕的做法,因为常量并不是随时间变化的变量。我甚至不知道它是否会起作用。
  • 每次我想添加新邮件时,我都不想总是传入并返回现有的$messages数组。
  • 我甚至尝试过使用session var,但这显然不适合这个目的(它总是1页加载太晚了。)

有什么建议吗?

谢谢!

编辑:我在上面引起了一些混淆后添加... $messages数组应该是全局的:我需要能够通过各种不同的类以及整个脚本的顶层添加它。

最好的比较是使用数据库来存储运行时发生的所有消息,当它是输出时,查询数据库并输出每条消息。这种比较的例外只是$ messages数组的生命周期是页面加载(它们在页面加载期间累积,并在之后消失)。

因此,例如,假设我在脚本中一个接一个地运行10个不同的操作。这些动作中的每一个都使用不同的类。这些类中的每一个都应该能够发布到$messages->add()。在所有10个动作运行之后,它是“输出时间”,$ messages数组最多可以包含10个不同的消息,这些消息是通过所有不同的类添加的。

我希望这会澄清一点。

2 个答案:

答案 0 :(得分:2)

我不清楚你想做什么,但一个好方法就是简单地使用一个私有变量:

class messages {
   private $messages = array();
   public function add($new) {
     $this->messages[] = $new;
   }
   public function output() {
     // Whatever; e.g. a foreach loop that echoes all the messages
   }
}

答案 1 :(得分:1)

我认为你需要一个实例字段。