php封裝cookie類調用 ( 不足之處請指正 )

<?php
/**
 * Cookie的設置、讀取、更新、刪除
 */
class CustomCookie{
    static private $_instance = null;
    private $expire= 0;
    private $path = '';
    private $domain = '';
    private $secure = false;
    private $httponly = false;

    /**
     * 構造函數完成Cookie參數初始化工作
     * @param array $options [Cookie相關選項]
     */
    private function __construct(array $options=[]){
        $this->setOptions($options);
    }
    /**
     * 設置相關選項
     * @param array $options [Cookie相關選項]
     */
    private function setOptions(array $options=[]){
        if(isset($option['expire'])){
            $this->expire = (int)$options['expire'];
        }
        if(isset($options['path'])){
            $this->path = $options['path'];
        }
        if(isset($options['domain'])){
            $this->domain = $options['domain'];
        }
        if(isset($options['secure'])){
            $this->secure = (bool)$options['secure'];
        }
        if(isset($options['httponly'])){
            $this->httponly = (bool)$options['httponly'];
        }
        return $this;
    }

    /**
     *單例模式
     * @param [array] $options [Cookie相關選項]
     * @param [object]          [對象實例]
     */
    public static function getInstance(array $options=[]){
        if(is_null(self::$_instance)){
            $class = __CLASS__;
            self::$_instance = new $class($options);
        }
        return self::$_instance;
    }
    /**
     * [設置Cookie]
     * @param string $name     Cookiede的名稱
     * @param mixed  $value    Cookiede的值
     * @param array  $options  Cookie相關選項
     */
    public function set($name,$value,array $options=[]){
        if(is_array($options)&&count($options)>0){
            $this->setOptions($options);
        }
        if(is_array($value)||is_object($value)){
            $value = json_encode($value);
        }
        setcookie($name,$value,$this->expire,$this->path,$this->domain,$this->secure,$this->httponly);
    }

    /**
     * 得到指定的cookie
     * @param  string $name Cookie名稱
     * @return mixed       返回null或者對象或者標量
     */
    public function get($name){
        if(isset($_COOKIE[$name])){
            substr($_COOKIE[$name],0,1)=='{'?json_decode($_COOKIE[$name]):$_COOKIE[$name];
        }else{
            return null;
        }
    }

    /**
     * 刪除指定cookie
     * @param string $name Cookie名稱
     * @param array $options 相關選項
     */
    public function delete(string $name,array $options=[]){
        if(is_array($options) && count($options) > 0){
            $this->setOptions($options);
        }
        if(isset($_COOKIE[$name])){
            setcookie($name,'',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
            unset($_COOKIE[$name]);
        }
    }

    /**
     * 刪除所有cookie
     */
    public function deleteAll(array $options=[]){
        if(is_array($options) && count($options) > 0){
            $this->setOptions($options);
        }
        if(!empty($_COOKIE)){
            foreach($_COOKIE as $name=>$value){
                setcookie($name,'',time()-1,$this->path,$this->domain,$this->secure,$this->httponly);
                unset($_COOKIE[$name]);
            }
        }
    }
}

// $cookie = CustomCookie::getInstance();
// echo "<pre>";
// var_dump($cookie);die;
// echo "</pre>";
// $cookie->set('x','x');
// $cookie->set('xx','xx');
// $cookie->set('xxx',['csd'=>'cdsvds','csdcsd'=>'cdsgc']);
// $cookie->set('xxxx',['csd'=>'cdsvds','csdcsd'=>'cdsgc']);
// $cookie->delete("xx");
// $cookie->deleteAll();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章