Как и обещал, вернулся к flash сообщениям. Переделаем его на статические методы. Итак, немножко теории.
Статические методы могут вызываться без создания экземпляра класса (объекта), при объявлении метода указывается ключевое слово static. Точно так же объявляется и статический атрибут класса.
class Foo {
static public $atr;
static public function test() {}
}
Т.к. статические атрибуты не связаны с экземпляром, то и вызов их осуществляется не через $this->atr, а через self::$atr, обращаю внимания на двойное двоеточие и баксик. Есть ещё одна печальная особенность, сильно ограничивающая маневры – при расширении (extends) класса статический атрибут остаётся связанным и с родителем, поэтому ждём PHP 5.2.6, где появится возможность вызывать через static::$atrатрибут определённого этого класса.
Заведём константы для разных типов сообщений
const INFO = 1;
const NOTICE = 2;
const WARNING = 3;
И статические переменные
static protected $_name = ‘flash’;
static protected $_nameMessage = ‘message’;
Первая служит ключом массива для flash сообщений, а второй для подвида — message, который имеет три вышеуказаных типа: информация, предупреждение и критическая ошибка.
Ну и описываем три основных метода
static public function get($index, $keep = false) {
if ( self::isExists($index) ) {
$retVal = $_SESSION[ self::$_name ][ $index ];
if (!$keep) {
unset($_SESSION[ self::$_name ][ $index ]);
}
return $retVal;
}
}
static function set($index, $value) {
$_SESSION[ self::$_name ][ $index ] = $value;
}
static function isExists($index) {
return isset($_SESSION[ self::$_name ][ $index ]);
}
Первый — get, он принимает индекс и второй переменной может идти значение $keep, которая позволяет не удалять переменную после запроса. Ну а внутри проверяем есть ли что, берем и чистим если нужно.
Вот весь класс
<?php
class Amdy_Flash {
static protected $_name = 'flash';
static protected $_nameMessage = 'message';
const INFO = 1;
const NOTICE = 2;
const WARNING = 3;
static public function get($index, $keep = false) {
if ( self::isExists($index) ) {
$retVal = $_SESSION[ self::$_name ][ $index ];
if (!$keep) {
unset($_SESSION[ self::$_name ][ $index ]);
}
return $retVal;
}
}
static function set($index, $value) {
$_SESSION[ self::$_name ][ $index ] = $value;
}
static function isExists($index) {
return isset($_SESSION[ self::$_name ][ $index ]);
}
static function setMessage($text, $type) {
self::set(
self::$_nameMessage,
array(
'text' => $text,
'type' => $type
)
);
}
static public function getMessage($keep = false) {
return self::get( self::$_nameMessage, $keep );
}
static public function getMessageText($keep = false) {
if ( self::isExists( self::$_nameMessage ) ) {
$message = self::getMessage($keep);
return $message['text'];
}
}
static public function getMessageType($keep = true) {
if ( self::isExists( self::$_nameMessage ) ) {
$message = self::getMessage($keep);
return $message['type'];
}
}
static public function setInfo($text) {
self::setMessage($text, self::INFO );
}
static public function setNotice($text) {
self::setMessage($text, self::NOTICE );
}
static public function setWarning($text) {
self::setMessage($text, self::WARNING );
}
}
?>
Теперь его можно смело добавить в хелперы к форме, в другой статье напишу как.
Используем так
var_dump( Amdy_Flash::get('var') );
Amdy_Flash::set('var', 'value');
var_dump( Amdy_Flash::getMessageText() );
Amdy_Flash::setInfo('test');
Поделиться в соц. сетях
Похожие посты: