0

必要なクラスを Web で作成しました。彼女のライフサイクル中のこのクラスは、ローカルの MySql db との接続を開きます。

私のコードでは、この例のように、このクラス インスタンスのスコープはローカルです。

function doSomething(){
    $class = new MyClass();
    // ... do something with $class
}

doSomething();

したがって、関数が終了するたびに、オブジェクトは破棄されます。しかし、doSomethingクラスを一定回数呼び出した後、「データベースに接続できません」というエラーが発生するため、db接続が正しく停止することはないと思います。

クラスのデストラクタを見ると、それが実行する唯一の操作は

unset($this);

unset($this) はデータベース接続も閉じますか? それを閉じる最良の方法は何ですか?

ありがとう

4

3 に答える 3

0
public function __destruct()
{
unset($objname);
session_destroy();
}
于 2013-10-09T12:51:24.587 に答える
0

PHP はリクエストの最後に mysql 接続を閉じますmysql_close() を使用する必要は通常ありません。非永続的な開いているリンクは、スクリプトの実行の最後に自動的に閉じられるからです。

スクリプトの実行中に doSomething を数回実行する場合 - mysql_close をデストラクタに追加できます

また、永続的な接続 ( mysql_pconnect ) を使用することもできます。これにより、パフォーマンスが向上します。

注意してください-mysqli拡張機能を使用する方が良いです

于 2013-10-09T20:27:21.307 に答える
0

私はちょうど次のことを書きました、それが役に立てば幸いです:

class db {
    public function __construct() {
        $this->conn = mysqli_connection('localhost','user','pass','dbname');
    }

    public function mysql_q($sql) {
        $result = mysqli_query($this->conn,$sql);
        return ($result) ? true : false;
    }

    public function __destruct() {
        mysqli_close($this->conn);
    }
}

$db = new db(); // auto call __construct to connect db
echo ($db->mysql_q($sql)) ? "Successful!" : "Failed!";
unset($db); // auto call __destruct to close connection
于 2017-11-28T05:56:19.713 に答える