首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少PHP中的重复代码

问减少PHP中的重复代码
EN

Stack Overflow用户
提问于 2016-07-26 14:35:16
回答 3查看 305关注 0票数 1

我在许多PHP文件中使用相同的代码块,有时在同一个PHP文件中使用(例如,当有一个if/else时)。我知道有更好的办法,但我不太清楚该怎么做。我想用一些东西来代替这个大块,但不确定什么合适。也许是require?

代码语言:javascript
复制
$hostname = 'localhost';
$database = 'dev_testing';
$username = 'root';
$password = 'XXXXXX';
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-26 14:48:34

@maalls和@TahaPaksu的回答是好的,但是@marcB的评论更好:通常您希望每次执行脚本时只连接数据库一次。我不想把您踢向依赖注入的方向,但是作为一个中间解决方案,我想建议这个类,它看起来很像一个单例,但实际上是追忆模式实现(其他模式示例也请参阅PHP设计模式 )。

总之:密码:

代码语言:javascript
复制
class Database() {

  static private $connection = null;

  public static function getConnection() {
    if (static::$connection === null) {
      $hostname = 'localhost';
      $database = 'dev_testing';
      $username = 'root';
      $password = 'XXXXXX';
      $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
      $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      static::$connection = $dbh;
    }

    return static::$connection;
  }
}

在您的脚本中,可以使用

代码语言:javascript
复制
$dbh = Database::getConnection();

您可以随心所欲地调用该行,但只有在第一次调用该脚本时,它才会连接到数据库。随后的调用将只返回相同的连接。这将为您的数据库节省相当多的开销。

票数 5
EN

Stack Overflow用户

发布于 2016-07-26 14:38:43

创建一个单独的文件(用于前妻)。( "connection.php"),将代码放入其中,并在任何需要它的地方,在代码开始时包括以下内容:

代码语言:javascript
复制
require_once('connection.php');
票数 3
EN

Stack Overflow用户

发布于 2016-07-26 14:40:16

您可以使用包含在php文件顶部的全局函数:

代码语言:javascript
复制
require_once("db.php");

文件db.php

代码语言:javascript
复制
function db_connect(){
    $hostname = 'localhost';
    $database = 'dev_testing';
    $username = 'root';
    $password = 'XXXXXX';
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}

在你的档案里:

代码语言:javascript
复制
$dbh = db_connect();
... 
// don't forget to close db before you open a new connection!
$dbh = null;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38592814

复制
相关文章

相似问题

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