php - 如何在静态类中模拟 __destruct()?

标签 php design-patterns static class-design

我已经为我自己的框架编写了一个简单的配置类。

有一些简单的函数,如get()set()loadFile()。 但是所有函数和变量都是静态的。

现在我想实现一个自动保存机制。我想创建一个实例(在我的 init() 函数中),其 __destruct() 将调用静态 destruct() 函数:

<?php

class Config
{
  static private $autoSave;
  static public function get() {} /* set(), save(), load(), etc. */

  static public function init($autoSave)
  {
    self::$autoSave = $autoSave;
    new Config();
  }
  static public function destruct()
  {
    if (self::$autoSave)
      self::save();
  }

  public function __destruct()
  {
    Config::destruct();
  }
}

?>

在这种情况下是否有更好的解决方案或者我的设计模式完全错误?

最佳答案

Are there any better solutions or is my design pattern completely wrong in this case?

析构函数仅针对对象调用,不适用于静态类。

相反,您可以将您的类从静态类转换为常规类,这样您就可以创建它的一个实例。然后它将具有析构函数。此外,它还使您的代码更易于重用和测试。

此外,您还可以为 __get__setArrayAccess 实现魔法方法,这通常有助于轻松存储和访问数据,因为用于配置。

或者,您可以将析构函数对象添加到静态类成员以实现您要查找的内容:

class ConfigDestructor
{
  public function __destruct()
  {
    Config::destruct();
  }
}

class Config
{
  static private $destructorInstance;
  static private $autoSave;
  static public function get() {} /* set(), save(), load(), etc. */

  static public function init($autoSave)
  {
    if (null === self::$destructorInstance) 
        self::$destructorInstance = new ConfigDestructor();

    self::$autoSave = $autoSave;
  }
  static public function destruct()
  {
    if (self::$autoSave)
      self::save();
  }
}

仅供引用:您曾写过要添加自动保存功能。 __destruct()register_shutdown_function 都有一个共同的差距。 :

Note: Working directory of the script can change inside the shutdown function under some web servers, e.g. Apache.

您应该指定一个绝对路径来访问要保存到的文件。另见:PHP file creation/write within destructor .

关于php - 如何在静态类中模拟 __destruct()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6984470/

相关文章:

c# - 具有只读哈希表的嵌套内部类在分配时引发Null ref异常。

Scala 使用最终静态变量

angular - Azure Devops 将 Angular 应用程序部署到静态 Web 应用程序

python - 具有许多参数的对象的工厂方法

c++ - 关于序列化、反序列化的设计问题

php - 使用下拉列表显示一类数据

php - SQL 获取帖子的最新评论日期 - 论坛

vba - 使用非默认值在 VBA 中初始化静态变量

php - 如何在 laravel 中使用 multi required_if?

php - 为什么 jQuery 在我的网站上不起作用?