PHP クラス (汎用 ODBC データベース インターフェイス) があります。メソッドは変更されませんが (PDO を使用するため)、接続文字列は変更されます。ユーザーが接続文字列全体を手動で渡したり、接続文字列に配置される ODBC ドライバーを指定したりすることを避けるために、クラスを拡張して SQL Server 固有のバージョンを作成します。
汎用 PDO ODBC ドライバー
class PDO_ODBC implements DBDriver{
private $driver;
private $connection_string;
public function connect(){
if(!$this->driver || !$this->connection_string){
throw new \Exception("Invalid connection string or database driver.");
}
}
}
SQL Server 固有のバージョン
class PDO_ODBC_SQL_Server extends PDO_ODBC{
public function __construct(){
$this->driver = 'SQL Server';
$this->connection_string = 'odbc:Driver={[Driver]};Server=[Host];Database=[DBName];Uid=[Username];Pwd=[Password]';
}
}
問題は、新しいPDO_ODBC_SQL_Server
オブジェクトを作成して を呼び出すと、 andが存在しないconnect()
ために例外がスローされることです。しかし、これはどうしてですか?を使用すると、これらのプロパティの両方が表示されます。注意すべきことの 1 つは、次のように、ドライバーと接続文字列を除くすべてのプロパティのクラスの名前空間も示していることです: http://pastebin.com/qh40eDpa。実際、名前空間の下には、接続文字列とドライバーの個別の変数があります。$this->driver
$this->connection_string
print_r
print_r
基本 ODBC クラスを拡張して同様の設計パターンを使用しながら、これを修正して例外がスローされないようにするにはどうすればよいですか? そうでない場合は、開発者がドライバーと接続文字列を渡すことができるようにすることもできます...
簡潔にするために、上記のコード サンプルではプライベート変数のほとんどを省略していることに注意してください。これらのクラスは両方とも別々のファイルにあり、名前空間の下にありますLib\Database