Php 当我刷新页面时,我的数组恢复到原始状态,单例不工作?

Php 当我刷新页面时,我的数组恢复到原始状态,单例不工作?,php,singleton,Php,Singleton,添加类别后,它不会保存我的更改。 如果我添加一个类别,它将显示在概述中,但如果我刷新,我将看到原始金额。 我猜我的单例设计中有一个错误,但我似乎找不到它 class ProductService { private $_database; public function __construct($databaseType) { $databaseFactory = new DatabaseFactory(); $this->_databa

添加类别后,它不会保存我的更改。 如果我添加一个类别,它将显示在概述中,但如果我刷新,我将看到原始金额。 我猜我的单例设计中有一个错误,但我似乎找不到它

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中执行的每个请求都是无状态的

如果希望在请求之间持久化数据,则需要将数据放在某种形式的持久存储中,即会话、文件系统、数据库、内存等


Singleton模式仅确保为给定请求创建对象的单个副本,

@user3704860如果您认为我的答案最有帮助,请不要忘记将我的答案标记为最佳答案。