当我刷新页面时,我的数组恢复到原来的状态,单例不工作?
When I refresh the page my array is back to original, singleton not working?
添加类别后没有保存我的更改。
如果我添加一个类别,它会显示在概览中,但如果我刷新,我会看到原始数量。
我想我的单例设计有错误,但我似乎找不到它。
class ProductService {
private $_database;
public function __construct($databaseType) {
$databaseFactory = new DatabaseFactory();
$this->_database = $databaseFactory->createDatabase($databaseType);
}
public function addCategory($category){
$this->_database->addCategory($category);
}
public function getAllCategories() {
return $this->_database->getAllCategories();
}
}
class DatabaseFactory {
public function __construct() {
}
public function createDatabase($type){
switch ($type) {
case "Memory" :
return MemoryDatabase::getInstance();
}
}
}
class MemoryDatabase {
private $categories;
private function __construct() {
$this->categories = array(
new Category("Cheese"),
);
}
public static function getInstance() {
static $inst = null;
if ($inst === null) {
$inst = new MemoryDatabase();
}
return $inst;
}
private function __clone() {}
private function __wakeup() {}
public function addCategory($category) {
array_push($this->categories, $category);
}
public function getAllCategories() {
return $this->categories;
}
}
您在 PHP 中执行的每个请求都是无状态的。
如果你想在请求之间持久保存数据,你需要将数据放在某种形式的持久存储中,即会话、文件系统、数据库、内存等。
单例模式仅确保创建一个对象的单个副本,对于给定的请求。
添加类别后没有保存我的更改。 如果我添加一个类别,它会显示在概览中,但如果我刷新,我会看到原始数量。 我想我的单例设计有错误,但我似乎找不到它。
class ProductService {
private $_database;
public function __construct($databaseType) {
$databaseFactory = new DatabaseFactory();
$this->_database = $databaseFactory->createDatabase($databaseType);
}
public function addCategory($category){
$this->_database->addCategory($category);
}
public function getAllCategories() {
return $this->_database->getAllCategories();
}
}
class DatabaseFactory {
public function __construct() {
}
public function createDatabase($type){
switch ($type) {
case "Memory" :
return MemoryDatabase::getInstance();
}
}
}
class MemoryDatabase {
private $categories;
private function __construct() {
$this->categories = array(
new Category("Cheese"),
);
}
public static function getInstance() {
static $inst = null;
if ($inst === null) {
$inst = new MemoryDatabase();
}
return $inst;
}
private function __clone() {}
private function __wakeup() {}
public function addCategory($category) {
array_push($this->categories, $category);
}
public function getAllCategories() {
return $this->categories;
}
}
您在 PHP 中执行的每个请求都是无状态的。
如果你想在请求之间持久保存数据,你需要将数据放在某种形式的持久存储中,即会话、文件系统、数据库、内存等。
单例模式仅确保创建一个对象的单个副本,对于给定的请求。