减少PHP中的重复代码

jon*_*ich 1 php mysql pdo

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

$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);
Run Code Online (Sandbox Code Playgroud)

Gol*_*rol 5

@maalls和@TahaPaksu的答案很好,但@ marcB的评论甚至更好:通常你只想在每个脚本执行时连接到数据库一次.我不想在依赖注入的方向上踢你,但作为一个中间解决方案,我想建议这个类看起来大致像一个单例,但实际上是Memoization模式实现(参见PHP Design)图案为其他图案的例子).

无论如何:代码:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

在您的脚本中,您可以使用它来调用它

$dbh = Database::getConnection();
Run Code Online (Sandbox Code Playgroud)

您可以根据需要随时调用该行,但只有在第一次调用该脚本时才会连接到数据库.后续调用将返回相同的连接.这将为您的数据库节省相当多的开销.