首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立PHP连接

问建立PHP连接
EN

Stack Overflow用户
提问于 2016-06-18 14:33:22
回答 1查看 73关注 0票数 0

我刚开始在PHP中使用PDO,在查看了一些示例代码之后,我想知道如何更有效地处理db连接。

我的dbconnector.php中有以下内容来建立连接。这些回波只是测试代码:

代码语言:javascript
复制
try {
    $db = new PDO("mysql:host=$servername;dbname=$dbname", $appusername, $apppassword);
    // Set the PDO error mode to exception
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected Successfully";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

在每个类中利用这些代码的最佳方法是什么,这样我就不会把它复制到每个需要获取数据的函数中了?我考虑过扩展PDO,只是根据需要创建一个db对象,但我阅读了一些帖子和文章,这些文章似乎不鼓励这样做,因为PDO已经是面向对象的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-18 16:14:51

我考虑过扩展PDO

这是一个完全可以理解的新手错误。然而,这违反了(至少)实心的两个规则:SRP和LSP。

单责任原则:通过扩展PDO,您的新类现在已经将数据访问耦合到新类要做的任何事情。

Liskov替换原则:通过扩展PDO,您还可以将新类声明为PDO的更大版本,而它不是。任何为PDO (function foo(PDO $pdo))键入提示的函数都会接受您的新类作为参数--而实际上它不应该。

我认为可以为开闭原则提供一个案例,但这给了你足够的思考。

类使用来自该数据库的输出可能更有意义,而不是将整个数据库连接注入类中。也就是说,与其强制新类使用数据库连接,不如只将它所需的数据传递给类。这是最简单的实现。

也就是说,有充分的理由需要将数据库连接注入到类中。但是,应该使用依赖注入来完成这一任务。下面是一个简单的例子:

代码语言:javascript
复制
class Foo
{
    public function __construct(PDO $pdo){
         $this->PDO = $pdo;
    }

    public function doTheThing(){
         $this->PDO->query(/* do whatever */);
         // ...
    }
}

$pdo = new PDO(/* whatever */);
$foo = new Foo($pdo);

通过这种方式,您可以基于自定义构建的PDO实例实例化新类,并使用不同的PDO对象访问不同的数据库。

如果您需要更进一步,您可以创建一个“数据访问”接口,创建实现它的对象,并为接口键入提示。然而,仅仅注入一个PDO实例是朝着正确方向迈出的美妙的第一步。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37898112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档