单例模式
$_instance必须声明为静态的私有变量
构造函数必须声明为死哟偶,防止外部程序new类从而失去单例模式的意义
getInstance()方法必须设置为公有的,必须调用此方法以返回实例的一个引用
::操作符只能访问静态变量和静态函数
new对象都会消耗内存
使用单例模式生成一个对象后,该对象可以被其他众多对象所使用
<?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 __constrct(array $options = []){
$this->setOptions($options);
}
/**
*设置相关选项
*@param array $options Cookie相关选项
*/
private function setOptions(array $options = []){
if(isset($options['expire'])){//是否设置cookie过期时间
$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相关选项
*@return 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 Cookie名
*@param mixed $value Cookie值
*@param array $options 其它选项
*
*/
public function set(string $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, JSON_FORCE_OBJECT);
}
setCookie($name, $value, $this->expire, $this->domain, $this->secure, $this->httponly);
}
/**
*获取Cookie
*@param String $name Cookie名
*@return mixed 返回一个null或者一个对象
*/
public function get(string $name){
if(isset($_COOKIE[$name])){
return substr($_COOKIE[$name], 0, 1) == '{' ? json_decode($_COOKIE[$name] : $_COOKIE[$name]);
}else{
return null;
}
}
/**
*删除指定Cookie
*
*/
public function delete(string $name){
}
}
//测试
$cookie = CustomCookie::getInstance();
//var_dump($cookie);
$cookie->set('aa', 11);
$cookie->set('bb', 22);
$cookie->set('cc', 33, ['expire'=>time()+3600])
$cookie->set('userInfo', ['username'=>'shulv', 'age'=>22]);
//var_dump($cookie->get('userInfo'));
var_dump($cookie->get('aa'));
<?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 __constrct(array $options = []){ $this->setOptions($options); } /** *设置相关选项 *@param array $options Cookie相关选项 */ private function setOptions(array $options = []){ if(isset($options['expire'])){//是否设置cookie过期时间 $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相关选项 *@return 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 Cookie名 *@param mixed $value Cookie值 *@param array $options 其它选项 * */ public function set(string $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, JSON_FORCE_OBJECT); } setCookie($name, $value, $this->expire, $this->domain, $this->secure, $this->httponly); } /** *获取Cookie *@param String $name Cookie名 *@return mixed 返回一个null或者一个对象 */ public function get(string $name){ if(isset($_COOKIE[$name])){ return substr($_COOKIE[$name], 0, 1) == '{' ? json_decode($_COOKIE[$name] : $_COOKIE[$name]); }else{ return null; } } /** *删除指定Cookie * */ public function delete(string $name){ }}//测试$cookie = CustomCookie::getInstance();//var_dump($cookie);$cookie->set('aa', 11);$cookie->set('bb', 22);$cookie->set('cc', 33, ['expire'=>time()+3600])$cookie->set('userInfo', ['username'=>'shulv', 'age'=>22]);//var_dump($cookie->get('userInfo'));var_dump($cookie->get('aa'));
$this->expire=(int)string 将字符串转为整形
封装