2017-03-08 7 views
0

phpドキュメントからは、そのオブジェクトの存続期間を通じてPDO接続が存在します。 $ connがmyFuncというの範囲内のみであるので、そう...以下のコード...php PDO接続クローズスコープ

<?php 

for($i = 0; $i < 5; $i++) 
{ 
    myfunc(); 
} 

function myFunc() 
{ 
    $conn = new PDO("connectionStuff"); 

    //Do things 
} 

?> 

で、PDO接続GETはmyFuncというの実行が終了するたびに閉じられていますか?または、ページ全体が終了するまで5つのPDO接続を開いたままにしますか?

myFuncの最後に$ conn = nullを設定する必要がありますか、それとも不要ですか?

+2

自分でテストしてください。 PHPスクリプトの最後に 'var_dump($ conn);'を追加するだけです。前に作成したインスタンスを上書きする新しいPDOインスタンスを常に確立しています。ですから、 'myFunc()'関数の終わりまで常に1つのPDO接続があります。 – Marcel

+0

ありがとう。また、このベストプラクティスは、私は1ページあたり1つのPDO接続を使用し、接続オブジェクトを関数に渡すべきですか? – mang

答えて

1

あなたはあなたのコメントに尋ねました。現代のプログラミングでは、あなたのような場合にdependency injectionを使用することがベストプラクティスです。さらに、容器の使用がより実用的である。現代のオブジェクト指向のフレームワークでは、常にコンテナとして機能し、必要なものすべてを提供するサービスマネージャがあります。

これは依存関係コンテナです。アプリケーションに必要なすべてのインスタンスをそこに格納することができます。これは、テストされていない小さなサンプルであり、依存性注入のメリットを示しています。 DIコンテナはこの単純な例よりはるかに複雑であるため、これを生産的な方法で使用すべきではありません。

実際には、次の例のように使用できます。

// when you instanciate your application 
$oContainer = new DiContainer([ 
    'db-connection' => new PDO(...), 
]); 

// in your specific class 
public function doSomethingWithDatabase(DiContainer $oContainer) { 
    $oDbHandle = $oContainer->get('db-connection'); 
    ... 
} 
+0

ありがとうございます。私はその考えが好きです。したがって、一番下の行、DB接続は、関数内でインスタンス化されるのではなく関数に渡されるべきです、正しいのでしょうか? – mang

+0

絶対に正しい – Marcel

関連する問題