【问题标题】:php creating a class variablephp 创建一个类变量
【发布时间】:2012-03-21 09:35:44
【问题描述】:

您好,我正在使用 php,我正在尝试创建一个数据库类,其中构造函数会将类连接到数据库并将指针分配给类变量。我遇到的问题是,每次创建类的新实例时,都会调用构造函数并且代码连接到数据库。我不明白为什么每次调用它时它都应该连接到数据库,所以我将如何制作一个在所有实例中都相同的类变量,一旦给定指针,它就不会创建它再次。

谢谢

【问题讨论】:

标签: php oop class


【解决方案1】:

您应该创建一个单独的连接并在类之间共享,而不是为您创建的每个类创建新连接。

$connection = new PDO( ... );

$first = new Foo( $connection );
$second = new Bar( $connection );

这样,两个实例都可以访问同一个连接。

您也可能会从观看此视频中受益:The Clean Code Talks - Don't Look For Things!

【讨论】:

    【解决方案2】:

    您好,您有两种选择。

    最好的办法是创建一个singleton class。这是一个引用自身的类,因此您永远不能创建多个它。如果您尝试创建多个它,它将返回当前初始化的自身版本。

    否则坚持你所拥有的,只是确保你不是每次都打电话给new

    例如

    $db = new Database(); // call this once to create
    // don't do this again
    $anotherdb = new Database();
    // just use the db object from before
    $db->query("...");
    

    但是这可能会让人感到困惑,并且您可能会失去变量的范围,所以我建议使用单例方法。有些人会告诉你不要使用单例,但这取决于你。适用于数据库类。

    如果您在互联网上环顾四周,您会发现其他数据库类的示例。

    也可以看看像 codeigniter 这样的框架,它们使用自己的数据库类。可能值得看看它们是如何工作的。

    【讨论】:

    • 单身人士是邪恶的。如果他确实需要多次连接(连接到不同的数据库,使用不同的凭据)怎么办?
    • 我听说单身人士是邪恶的,但我从来没有遇到过任何问题。在 iOS 编程(目标 c)之后,我发现单例非常有用。您可以创建具有多个连接的单例。创建一个静态变量来保存每个连接。无论如何,它是帮助 OP 的答案。
    【解决方案3】:

    数据库连接不应进入构造函数。你应该有一个ConnectionFactory 类,它将连接数据库并返回一个新的DatabaseConnection 对象。

    <?php
    
    class ConnectionFactory {
        public static function newConnection($credentials) {
            //Connect to database
            $connection = new PDO(/* Credentials */);
            return $connection;
        }
    }
    
    $connection = ConnectionFactory::newConnection(CREDENTIALS);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 2012-04-19
      • 2016-02-25
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      相关资源
      最近更新 更多