時間が経ち、PHPが止まることはありません。SPLのような素晴らしいものがあります。その可能性の1つは、オブジェクトを配列としてアクセスすることです。 ArrayAccessインターフェースの実装。
そして今、私は子供時代のアイデアである$ _COOKIE配列を思い出し、それを実装しました:
<?php /* */ $_COOKIE['lang'] = 'ru';
あなたはカットの下で実装を見ることができます
<?php class CookieStorage implements ArrayAccess { // const DEFAULT_EXPIRE_TIME = 1411200; // 2 // private $_storage; // $_COOKIE public function __construct($cookies) { $this->_storage = $cookies; } // ArrayAccess public function offsetExists ($offset) { return isset ($this->_storage[$offset]); } // ArrayAccess public function offsetUnset ($offset) { unset($this->_storage[$offset]); } // public function offsetGet ($offset) { return $this->_storage[$offset]; } // public function offsetSet ($offset, $value) { if( $this->_setCookie($offset, $value) ){ $this->_storage[$offset] = $value; } else{ trigger_error('Cookie value was not set', E_USER_WARNING); } } // setcookie private function _setCookie( $name, $value, $expire = 0, $path = '/', $domain = false, $secure = false , $httponly = false ){ if (!headers_sent()){ if ($domain === false){ $domain = $_SERVER['HTTP_HOST']; } if( $expire == 0 ){ $expire = time() + self::DEFAULT_EXPIRE_TIME; } return setcookie ( $name, $value, $expire, $path, $domain, $secure, $httponly ); } return false; } } // $_COOKIE = new CookieStorage( $_COOKIE );
このソリューションは、単純なsetcookie()関数と比較してどの程度優れていますか? 少なくとも、レコードはブラウザとグローバルな$ _COOKIE配列に同時に送られます(ページがリロードされる前であっても、それを操作する必要がある場合があります)。 このオプションでは、ほとんどのデフォルトパラメータを設定し、これらのパラメータを調整できます。 クラスを使用すると、特定の条件に応じて必要な機能を追加できます。
いずれにせよ、これは普遍的な理想的な解決策ではありません。 これは自転車です。はい、これは私の自転車です。 これは、%username%が好む可能性があるアイデアであり、問題に対する包括的なソリューションに発展させます。