Лучший способ перенести и изменить переменную через различные экземпляры и функции? - PullRequest
0 голосов
/ 03 июня 2010

Я ищу "лучший метод" для создания системы сообщений / уведомлений. Я использую подход на основе ООП для скрипта и хотел бы сделать что-то вроде этого:

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

Метод 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 через метод каждый раз, когда я хочу добавить новое сообщение.
  • Я даже пытался использовать сеансовую переменную для этого, но это явно не подходит для этой цели вообще (загрузка страницы всегда будет слишком поздно).

Есть предложения?

Спасибо!

РЕДАКТИРОВАТЬ: Добавлено после того, как я вызвал некоторую путаницу с выше ... Массив $messages должен быть глобальным: мне нужно иметь возможность добавлять к нему различные классы, а также на верхнем уровне всего сценария.

Лучшее сравнение, которое приходит на ум, - это использовать базу данных для хранения всех сообщений, которые появляются во время выполнения, а когда наступает время вывода, запрашивать базу данных и выводить каждое сообщение. Исключением из этого сравнения является только то, что время жизни массива $ messages является загрузкой страницы (они накапливаются во время загрузки страницы и исчезают сразу после этого).

Так, например, скажем, у меня есть 10 различных действий, выполняемых одно за другим в сценарии. Каждое из этих действий использует другой класс. Каждый из этих классов должен иметь возможность отправлять на $messages->add(). После выполнения всех 10 действий наступает «время вывода», и массив $ messages может содержать до 10 различных сообщений, которые были добавлены через все различные классы.

Надеюсь, это немного прояснит.

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Я не совсем понимаю, что вы хотите сделать, но хорошим способом было бы просто использовать приватную переменную:

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 голос
/ 03 июня 2010

Я думаю, вам нужно либо поле экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...