5. class Session_Storage
{
function __construct($cookieName = 'PHP_SESS_ID')
{
session_name($cookieName);
session_start();
}
function set($key, $value) {
$_SESSION[$key] = $value;
}
// ...
6.
7. class User
{
protected $storage;
function __construct()
{
$this->storage = new Session_Storage();
function setLanguage($language)
{
$this->storage->set('language', $language);
}
// ...
}
$user = new User();
8. class User
{
protected $storage;
function __construct()
{
$this->storage = new Session_Storage();
function setLanguage($role)
{
$this->storage->set('role', $role);
}
// ...
}
$user = new User();
9.
10. class User
{
protected $storage;
function __construct($storage)
{
$this->storage = $storage;
}
}
$storage = new Session_Storage();
$user = new User($storage);
11. class User
{
protected $storage;
function __construct($storage)
{
$this->storage = $storage;
}
}
$storage = new Session_Storage();
$user = new User($storage);
12. class User
{
protected $storage;
function __construct($storage)
{
$this->storage = $storage;
}
}
$storage = new Session_Storage();
$user = new User($storage);
16. class Session_Storage
{
function __construct($cookieName = 'PHP_SESS_ID')
{
session_name($cookieName);
session_start();
}
function set($key, $value) {
$_SESSION[$key] = $value;
}
// ...
17. class User
{
protected $storage;
User
function __construct()
{
$this->storage = new Session_Storage(ʻSESSION_IDʼ);
function setRole($role)
{
$this->storage->set('role', $role);
}
// ...
}
$user = new User();
18. class User
{
protected $storage;
function __construct()
{
$this->storage = new Session_Storage(SESSION_NAME);
function setRole($role)
{
$this->storage->set('role', $role);
}
// ...
}
define(ʻSESSION_NAMEʼ , ʻSESSION_IDʼ);
$user = new User();
19. class User
{
protected $storage;
function __construct($sessionName)
{
$this->storage = new Session_Storage($sessionName);
function setRole($role)
{
$this->storage->set('role', $role);
}
// ...
}
User
$user = new User(ʻSESSION_IDʼ);
20. class User
{
protected $storage;
function __construct(array $sessionOptions)
{
$this->storage =
new Session_Storage($sessionOptions[ʻsess_nameʼ]);
function setRole($role)
{
$this->storage->set('role', $role);
}
// ...
} array
User
$user = new User(array(ʻsession_nameʻ=>USER_SESSʼ));
23. class User
{
protected $storage;
Glob al Registry
function __construct()
{
$this->storage = Registry::get(ʻSESSION_STORAGEʼ);
}
}
$storage = new SessionStorage();
Registry::set(ʻSESSION_STORAGEʼ, $storage);
$user = new User();
26. class User
{
protected $storage;
function __construct($storage)
User Storage
{
$this->storage = $storage;
}
}
$storage = new Session_Storage(ʻSESSION_IDʼ);
$user = new User($storage);
28. class User
{
protected $storage;
function __construct($storage)
{
$this->storage = $storage;
}
}
$storage = My_Sql_Session_Storage();
$user = new User($storage);
29. class User
{
protected $storage;
function __construct($storage)
{
$this->storage = $storage;
}
}
$storage = Session_Storage(ʻSESSION_IDʼ);
$user = new User($storage);
30. class User
{
protected $storage;
function __construct(Storage_Interface $storage)
{
$this->storage = $storage;
}
}
Interface Storage_Interface
{
public function set();
public function get();
}
31. class Session_Test implements Storage_Interface
{
public function get()
{
// test get
}
public function set()
{
// test set
}
}
/
62. DI -
class App_Foo extends BEAR_Base
{
public function __construct(array $config) 1.
{
parent::__construct($config);
__construct()
}
public function onInject() 2.
{ onInject()
$this->_bar = BEAR::dependency('App_Bar');
}
public function getBar(){ 3.
return $this->_bar->get();
}
}