pattern singleton class Cookie

331
12 марта 2017, 08:17

Написать класс-оболочку для работы с cookie. Класс должен содержать следующий набор функций:

  • сохранение
  • удаление
  • редактирование
  • считывание

По умолчанию кука должна устанавливаться на 1 год. Класс должен быть реализован таким образом, чтобы нельзя было создать более одного экземпляра класса.

class Cookie {
public static function instance() {
    static $instance = false;
    if( $instance === false ) {
        $instance = new static();
    }
    return $instance;
}

public static function setCookie($key, $value, $time = 31536000) {
    setcookie($key, $value, time() + $time, '/') ;
}
public static function getCookie($key) {
    if ( isset($_COOKIE[$key]) ){
        return $_COOKIE[$key];
    }
    return null;
}
public static function updateCookie($key, $value, $time = 31536000) {
    if ( isset($_COOKIE[$key]) ){
        self::deleteCookie($key);
        setcookie($key, $value, time() + $time, '/');
    }
    return null;
}
public static function deleteCookie($key)   {
    if ( isset($_COOKIE[$key]) ){
        self::getCookie($key);
        unset($_COOKIE[$key]);
    }
}

}

вот что сделал я, и не могу понять, то ли я

Answer 1

pattern singleton

Синглтон характеризуется двумя признаками:

  • Публичный статический метод для получения экземпляра класса
  • Все методы, позволяющие создать копию экземпляра(в т.ч. и конструктор) - приватные

Простейший сниппет для Singleton выглядит так:

class A {
  private static $a;
  public static function get() {
    return static::$a?: static::$a = new static();
  }
  private function __construct(){}
  private function __clone(){}
  private function __wakeup(){}
}
Answer 2

Покажу на простом примере паттерна синглотона:

class Cookie
{
    public static function instance()
    {
      static $instance = false;
      if( $instance === false )
      {
        // Позднее статическое связывание (PHP 5.3+)
        $instance = new static();
      }
      return $instance;
    }
    /**
     * Make constructor private, so nobody can call "new Class".
     */
    private function __construct() {}
    /**
     * Make clone magic method private, so nobody can clone instance.
     */
    private function __clone() {}
    /**
     * Make sleep magic method private, so nobody can serialize instance.
     */
    private function __sleep() {}
    /**
     * Make wakeup magic method private, so nobody can unserialize instance.
     */
    private function __wakeup() {}
    //Добавляете вашу логику
}

И потом можете работать с этим объектом:

$cookie = Cookie::instance();
$cookie->setCookie('name', 'value');
$value = $cookie->getCookie('name');
...
READ ALSO
VK Errod code 17

VK Errod code 17

Я после получения code от VK, получаю access_token

315
Как добавить в меню показ всех товаров?

Как добавить в меню показ всех товаров?

Подскажите, допустим меню зарегистрировано в файле functionsphp

212
Не работает sql запрос в функции php

Не работает sql запрос в функции php

Доброг8о времени! У меня не работает sql запрос находящийся в теле функции php

331
Получить нужный текст

Получить нужный текст

ЗдравствуйтеКаким образом из строки http://site

229