クラスが一度インスタンス化されれば、問題はありません。この場合、1つの接続のみを開きます。
クラスを数回インスタンス化する場合、または静的クラスとして使用する場合は、毎回接続を作成する可能性がありますが、これは理想的ではありません。
クラスをすべてアクティブにしておくと(つまり、作成したクラスへの参照をメモリから削除することはありません(私はテストしたことがありません)、PHPの内部で実際にこれを整理する必要がありますが、それでもデータベースへの1つの接続。ただし、作成したクラスへのハンドルを失った場合、PDOは破棄され、再開します。静的クラスとして使用している場合(つまり、で呼び出す場合class:function()
)、次のようになります。間違った道を進んでいます。
2つの一般的な解決策があり、両方に賛成と反対の議論があります。
1)DB接続を保存するためにグローバルを使用します。$ handle = PDOを作成し、$handleをグローバル変数として格納します。簡単に回すことができます。上書きしやすい-ここでは議論しません。
2)思い出す「静的」クラス(一般にシングルトンと呼ばれる)を作成します。基本的な構造は
private static $ThisObj;
private static $handle;
public static function getInstance() {
if( !(self::$ThisObj instanceof SoapDB) ) {
self::$ThisObj = new SoapDB();
try {
$this->handle = new PDO_Handler('mysql:dbname=' . DB_NAME . ';host=' . DB_HOST, DB_USER, DB_PASS);
$this->handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
// Error Here
}
}
return self::$ThisObj;
}
これを使用すると、通常、シングルトンとして個別のDBクラスを作成します。シングルトンvsグローバルの使用:あなたの呼び出し(調査後)。
3)3番目の答えは、上記のクラスを静的なものとしてのみ呼び出している場合(つまり、呼び出している場合class::function()
)、$ handleを静的なものとして作成するだけで、実際に問題を驚くほど解決する必要があります。基本的に、データベースをプロパティの1つとして、シングルトンを作成しています。
間違った答えや正しい答えはありません。
コメント「静的クラスとは」に基づいて編集します。
厳密に言えば、「静的プロパティを持つクラス」と言うべきです。説明すると、通常、次の構文でクラスを作成します。
$myClass = new class();
$methodResult = $myClass->method();
$myClass
次に、関数を呼び出すことで、気の利いた小さなことをたくさん行います。その後、クラスへの参照を削除し、プロパティ(変数)を失い、後で再開することができます。
静的クラス(この回答の目的のため)は、静的プロパティを持つクラスです。通常(絶対ではありませんが)行くことによって呼び出されます。
$methodResult = class::method();
あなたはクラスに固執しません-それは開始され、使用され、そして落とされます。ただし、プロパティ(s)を静的として保存var
すると、そのクラスを使用するたびに、それらのプロパティは最後の状態のままになります。method
設定できますが$this->MyVar = 'something'
、次回は$this->MyVarがまだ何かになります。
コードをコンパートメント化するのに非常に便利で、関数が他の関数を上書きするのを防ぎ、単体テストを簡単にすることができます。
(注-私はそれを単純にするために一般化しています。しかし、それはあなたにプロセスのアイデアを与えるはずです。)