【问题标题】:PHP Define a new PDO object inside class (outside function)PHP 在类内(函数外)定义一个新的 PDO 对象
【发布时间】:2013-10-18 11:10:48
【问题描述】:

我正在创建一个包含几个需要一些 SQL 内容的函数的类,我不想为每个函数定义一个新的 PDO 对象,但有一个适用于所有函数的对象。

这是我目前得到的:

<?php
class UserSystem
{
    public $mysqlDetails = 
    [
        "host"        => "127.0.0.1",
        "user"        => "",
        "pass"        => "",
        "database"    => "",
        "table"       => ""
    ];

    public $con = new PDO
    (
        "mysql:host=" . $this->mysqlDetails['host'] .
        ";dbname=" .    $this->mysqlDetails['database'] . ";",
                        $this->mysqlDetails['user'],
                        $this->mysqlDetails['pass']
    );

我怎样才能让它工作?目前我收到此错误: Parse error: syntax error, unexpected 'new' (T_NEW)。有没有更好的方法来做到这一点,所以我可以在函数中使用$con 变量而无需创建新变量。 我不想像我所看到的那样将它注入到函数中。即:

<?php
function someFunc ($pdo)
{
    $pdo->query("SELECT * FROM `someTable`");
}

【问题讨论】:

  • 您应该将其作为依赖项注入,而不是在类中初始化 PDO。您可以使用this 方法作为基础和改进。您当前的实现违反了几个SOLID 原则。

标签: php oop pdo


【解决方案1】:

除了编译时可解析的常量值之外,您不能初始化类属性。您必须在构造函数中创建 PDO 对象:

public function __construct() {
    $this->con = new PDO(...);
}

更好的是,你应该让你的类接受一个 PDO 对象并依赖注入它,因为我猜你需要的不仅仅是这个类中的数据库连接,而你不需要'不想在不同的类中一次又一次地连接到同一个数据库:

public function __construct(PDO $con) {
    $this->con = $con;
}

【讨论】:

  • 谢谢,我现在正在使用一个构造函数,它以一种干净简单的方式解决了我所有的问题。我创建了一个私有变量 $con 然后在构造函数中设置它,如果有人读到这个有同样的问题。
猜你喜欢
  • 2018-01-05
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2013-04-26
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
相关资源
最近更新 更多