php.net の mysql-connect ページで db アダプターを見つけました。
これは非常に多く閲覧されているページです (私は想像します)。
これには、著者がシングルトン パターン クラスであると主張するものが含まれます。
http://php.net/manual/en/function.mysql-connect.php にあります
作家は次のように述べています。
「これは、単一のデータベース接続を管理するシングルトン クラスです。Open メソッドは、定数値をデフォルトとして使用し、各 Web ページの上部にロードされた初期化スクリプトを介して ini ファイルから読み取ります。手動でown (スクリプトの途中でサーバーまたはデータベース名を切り替える必要がある場合) qry 関数は、準備されたステートメントを受け取り、最初の行、最初の連想行、最初のセル、または 2 番目のパラメーターに基づいて結果セット全体 (結果全体) を返します。省略した場合)」。
使用法: $DB = DB::Open();
$result = $DB->qry(" {SQL ステートメント} ;");
<?php
abstract class Database_Object
{
protected static $DB_Name;
protected static $DB_Open;
protected static $DB_Conn;
protected function __construct($database, $hostname, $hostport, $username, $password)
{
self::$DB_Name = $database;
self::$DB_Conn = mysql_connect($hostname . ":" . $hostport, $username, $password);
if (!self::$DB_Conn) { die('Critical Stop Error: Database Error<br />' . mysql_error()); }
mysql_select_db(self::$DB_Name, self::$DB_Conn);
}
private function __clone() {}
public function __destruct()
{
// mysql_close(self::$DB_Conn); <-- commented out due to current shared-link close 'feature'. If left in, causes a warning that this is not a valid link resource.
}
}
final class DB extends Database_Object
{
public static function Open($database = DB_NAME, $hostname = DB_HOST, $hostport = DB_PORT, $username = DB_USER,$password = DB_PASS)
{
if (!self::$DB_Open)
{
self::$DB_Open = new self($database, $hostname, $hostport, $username, $password);
}
else
{
self::$DB_Open = null;
self::$DB_Open = new self($database, $hostname, $hostport, $username, $password);
}
return self::$DB_Open;
}
public function qry($sql, $return_format = 0)
{
$query = mysql_query($sql, self::$DB_Conn) OR die(mysql_error());
switch ($return_format)
{
case 1:
$query = mysql_fetch_row($query);
return $query;
break;
case 2:
$query = mysql_fetch_array($query);
return $query;
break;
case 3:
$query = mysql_fetch_row($query);
$query = $query[0];
return $query;
default:
return $query;
}
}
}
?>
コードを見た後、1 つ質問があります。これは本当にシングルトンですか (DB クラスと Open 関数を参照)。
シングルトンパターンを機能させる静的プロパティはどうですか?