2017-01-01 17 views
0

私はちょうどoopを始めました。そして今、非常に簡単なことさえ私に混乱しているようです! これはmysqliの接続のための私のクラスである:dbクラスと複数のmysqli接続を避ける

$a=mysqli_real_escape_string($_POST['a']); 
$b=mysqli_real_escape_string($_POST['b']); 

$query='SELECT `name` FROM `someTable` WHERE `type`={'.$a.'}'; 
$query2='SELECT `name` FROM `someTable` WHERE `type`={'.$b.'}'; 

$DB = NEW DB; 
$test=$DB->query($query); 

$DB2 = NEW DB; 
$test2=$DB2->query($query2); 

私はちょうどクラスDBから2つのオブジェクトを作成しました:

class DB{ 
    private $con; 
    public function __construct(){ 
     $this->con=new mysqli('localhost','root','','dbName'); 
     if(!$this->con){ 
      echo '<b>There was a problem connecting to database! </b><br />errno: '.$con->connect_errno; 
      exit; 
     } 
     $this->con->set_charset("utf8"); 
    } 
    public function query($query){ 
     return $this->con->query($query); 
    } 
} 

はのは、私はこのようなつもりの使用だとしましょう。 オブジェクトごとに新しいmysql接続があることを意味しますか?はいの場合、どうすればそれを避けることができますか?

私は__destruct()関数でmysqli_close()を使うことができますが、いくつかのmysql接続を作成して破壊するのは良いとは限りません。

どうすればよいですか? p.s:私がoop(とmysqliも同様)で新しいと言ったのと同じように、私のクラスについてのコメントがあれば(例えば、私は正しい場所で文字セットを設定しましたか?)、私は賞賛されるでしょう。

答えて

1

クラスのインスタンスを作成しているときに、クラスが正しく動作する場合、再作成する必要はありません。あなたの質問で

例1

あなたはこれをしなかった:

$DB = new DB(); 
$test=$DB->query($query); 

$DB2 = new DB(); 
$test2=$DB2->query($query2); 

あなたは代わりにこれを行うことができます。

$DB = new DB(); 
$test = $DB->query($query); 
$test2 = $DB->query($query2); 

例2

一部をあなたがインスタンスを持っていて、どこでもそれを使いたいと思っています。コードの開始時または最初の要求時に作成することができます。どこにでも使用できます。

$DB = new DB(); 

function something(){ 

    global $DB; 

    $test = $DB->query($query); 
} 

ここで述べたようにクラスが単純な場合は、最初の例のように使用してください。このメソッドは、どこからでもアクセスする必要のあるインスタンス用です。ある関数はその中で何かを変更し、その変更を使って別の関数を変更します。

また、この方法は、コードの読み取りとデバッグが非常に困難になるため、悪い方法です。

いくつかの便利なリンク:

+1

- してください.... '' '今日は2017年です.... OOPタグで変数を使用してglobal'''! – pomaxa

+0

@pomaxaそうです。インスタンスのグローバル変数を使用するのは良い方法ではありません。実際に使用する前に作成したインスタンスを実際に使用したい場合は、その例です。 – ICE

+1

- 私はちょうど同様の質問へのリンクを残す:http://stackoverflow.com/a/219599/164803 – pomaxa

関連する問題