【问题标题】:PHP: Database-Connection in Class or globalPHP:类或全局中的数据库连接
【发布时间】:2013-03-08 15:26:27
【问题描述】:

我正在为学校做一个项目(截止日期 6 月;有充足的时间 ^^)。

目前 conf.php 中有一个数据库(所有其他 .php 都包括这个;它有一个引用 mysqli 对象的变量),我正在通过“全局”在类的每个方法中访问数据库$db_conn;"。 问题是,如果我只打开 class.php,它不包含 conf.php 并且会引发错误。所以我考虑为每个对象添加一个私有实例/静态变量。 这不起作用(意外的 T_NEW):

class foo{
    private static $db_conn = new mysqli("", "", "", "");
}

您如何处理数据库连接? 您将如何处理这个具体问题?

提前致谢^^

【问题讨论】:

    标签: php database class


    【解决方案1】:

    您可以在其他文件和类文件中使用include_once conf.php 文件。这样你总是有内容(和数据库参考)。

    【讨论】:

    • 感谢您的回答。问题是所有类和 conf.php 都在不同的文件夹和子文件夹中。所以我不能使用include_once 或require_once。但我会重组我的项目,以便所有导入的东西都在同一个文件夹中,这应该可以解决我的问题。谢谢
    【解决方案2】:

    如果您将数据库连接设为Singleton并且您有一个__autoload() 函数,那么您可以在每个类中都有一个在构造期间设置的dbconnection 属性。

    例如

    class DBConnection{
    
      private static $instance;
    
      private function __construct(){
        //make your db connnection
      }
    
      public static function get_connection(){
        if(empty self::$instance) self::$instance = new DBConnection;
        return self::$instance;
      }
    }
    
    class Foo {
    
      private $db;
    
      function __construct(){
        $this->db=DBConnection::get_connection();
      }
    }
    

    【讨论】:

    • 谢谢。好主意啊。我想我会试一试。 ^^ 谢谢
    • @Mathlight,简短的回答是:因为它在应用程序中引入了全局状态。这与使用全局变量基本相同。所有相同的处罚适用。要查看更好的方法,请查看here,不过您需要了解匿名函数的工作原理。
    • @tereško,感谢您的链接。我现在正在看谷歌视频,很有趣
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 2021-05-12
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多