【问题标题】:Using Singleton Class for Database对数据库使用单例类
【发布时间】:2012-08-02 10:25:46
【问题描述】:

我是 PHP 新手,试图从 Java 迁移到 PHP。这个问题可能是一个愚蠢的问题。抱歉,如果是的话。

我在 PHP 中发现了很少的单例实现,我打算将它用于数据库。我的问题是:如果调用两个不同的 PHP 页面或一个页面同时被多个客户端调用会发生什么?它不会使用相同的数据库连接、语句和存储结果在相同的变量中吗?结果不会被覆盖和损坏吗?

【问题讨论】:

  • 每个 PHP 页面都有自己的变量和资源。
  • 但我使用的是单例类。
  • @mrd081 这无关紧要。它只是当前执行脚本范围内的一个单例。这是每个用户,每个连接 - 每个并发执行环境都有自己的内存空间。重叠的危险为零。
  • 哈哈哈哈哈......这与 Java 完全不同......很高兴知道这一点。我想我会将所有变量设为静态,以便在所有实例之间共享它们并创建函数以获取连接。希望这能满足我的需要。

标签: php


【解决方案1】:
  • 不,每个请求都是相互分离的。这尤其意味着:每个资源(包括数据库连接)都在请求结束时关闭。但是,通常无需担心
  • 不,对数据库的并发访问不会对其造成伤害。事实上,这就是为什么数据库比平面文件更受欢迎的原因之一;)

【讨论】:

  • 但我使用的是单例类。如果一切都是分开的,那么单例有什么用?
  • 首先:忘记单例模式。这是邪恶的!它只是一种模式,以确保从给定类型(类)中只存在一个实例。就这样。关于“分离”:想象一下您重新启动计算机。一切都过去了,对吧?进程关闭时不会发生任何其他事情,并且没有其他任何事情(至少“几乎没有其他事情”)是命中 PHP 运行时的请求。
  • 我想将所有与数据库相关的变量保存在一个地方。我怎样才能做到这一点 ?我可以简单地创建一个包含所有静态常量的类常量吗?
  • @mrd081 我可以理解你为什么会因为 Java 背景而感到困惑,你需要记住 PHP 是一个完全不同的野兽。它是一种脚本语言,它不做多线程或类似的事情,它一次只处理一个客户端。所有并发和那种复杂的东西都由上层环境(例如 Apache)处理。想象一个 Java 应用程序,您在其中为每个连接的客户端启动了一个全新的实例——这就是 PHP 的工作方式。有点。现在考虑它当然是一个好方法。
  • 意味着最简单的方法是将它定义在一个文件中并将其包含在所需的每个页面中,而不是进入设计模式的心态:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多