【问题标题】:is this a good idea with static data这是静态数据的好主意吗
【发布时间】:2011-12-14 20:24:02
【问题描述】:

所以我在 PHP 中有一个不断增长的系统,其中我有一个负责数据库连接的静态类。

<?php 
    class Database {
        // ... connection upon construction and ways of escaping the data
        public function query($query) {
            // performs query and returns the data.
        }
    }

    class API { // Not actually called api, but for the purposes of this
        private static $database = false;

        public static function GetDatabase() {
            if (static::$database === false) {
                static::$database = new Database(connection information)
            }
            return static::$database;
        }
    }
?>    

我还有很多执行特定功能集的“控制器”或数据库适配器。

<?php 
    class UserDBAdapter {
        public function newUser($info) {
            // validates and builds the query statements

            API::GetDatabase()->query($query);
        }
    }
?>

所以真正的问题是我需要在整个代码中到处使用 UserDBAdapter。在几个不同的文件中说,可能在其他控制器中,我不想将它作为变量传递(当每个方法都有它时它会变得烦人)。我也不想创建 2 个这样的对象(出于速度目的)。

那么我可以做一些与我对 $database 对象相同的事情吗?在调用它们之前我不会初始化它们,这应该是有效的,并且无论范围如何,它们都不需要在整个过程中重新创建。至少这就是我开始这个想法的原因,但我不知道它是否是最好的想法。

谢谢

【问题讨论】:

  • 您是否考虑过使用诸如doctrine 之类的ORM?看起来这基本上就是你想要实现的。
  • 您的“用户”是指您连接的“数据库用户”,还是您在应用程序中使用的某些“实体/对象/数据”?

标签: php static-data


【解决方案1】:

我认为您所做的很好,您将数据库连接存储在注册表中,您可以在整个项目中轻松访问。

我想,理想情况下,您也可以在其他类中使用 setDatabase 和 getDatabase 方法覆盖它,并使用 API::getDatabase() 作为后备?

Zend 框架有 Zend_Db_Adapter::getDefaultAdapter(),我知道使用它。或者我使用 Zend_Registry::set('dbAdapter', $dbAdapter) 将适配器分配给注册表。我知道你没有使用 Zend,但它是某人做类似事情的一个例子。

【讨论】:

    【解决方案2】:

    通常,您提到的“控制器”在单独的文件中作为单独的类进行管理。

    有时,在所有应用程序中都使用“单例”一个项目。有时,根据使用情况,有多个副本,称为“实体”。

    您可以在此处了解更多信息: http://en.wikipedia.org/wiki/Object-Relational_Mapping

    【讨论】:

    • 否 UserDBAdapter 围绕用户行对数据库执行操作。因此,更改名称(传递 uid 和名称)、更改密码、注册、等等等等。与用户本身有关的一切都在用户数据库适配器中。我知道它们在一个单独的文件中,但我使用的是一个非常简单的编辑器 stackoverflow.com,而且我真的不想去城里。它应该是一个“代表”。无论如何,当然是单例模式。我非常喜欢那个想法。我完全忘记了:)
    • 我现在记得为什么我喜欢我正在做的事情以及为什么我不选择 Singleton。我有时会使用超过 1 个数据库连接。所以我希望能够使用任意数量的数据库。
    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2011-09-14
    相关资源
    最近更新 更多