1

現在、私はこれを行っています:

function __construct( $mysqli_connection )
{
    if( ! empty($mysqli_connection) && is_object($mysqli_connection) && ! $mysqli_connection->connect_error )
    {
        //Make the $mysqli universal to the class equal the given connection
        $this->mysqli = $mysqli_connection;
    }
    else
    {
        die("An invalid MySQLi connection was given.\n");
    }

}//function __construct

そして、次のようにクラスを開始します。

new className( $mysqli );

それは正常に動作しますが、私には次のように思われます。

  • その余分なコードは不要です
  • MySQLiリソースを占有するために使用されるメモリは、最終的に2倍になります(1つはクラスのメモリにありますが、メインコードにはまだ1つあります)

上記の点は正しいですか?もしそうなら、クラス内からMySQLiリソースを使用するためのより良い方法はありますか?上記の方法は、私が検索から見つけた唯一の方法です。

4

1 に答える 1

3

まず、コードを次のように減らすことができます。

private $mysqli;

function __construct(mysqli $conn)
{
    $this->mysqli = $conn;
}

クラスは、接続が確立されたかどうかを心配する必要はありません。接続が確立されていると想定できる必要があります。また、タイプヒントは、コンストラクターが呼び出されたときに予期されるクラスを示すのに役立ちます。

次に、mysqli別のオブジェクト内で使用している場合、オブジェクトは複製されません。代わりに、その参照カウントが増加します。カウントがゼロに低下すると、オブジェクトは削除されます。オブジェクトが常にコピーされる場合、依存性注入を行うと非常にコストがかかります。

于 2013-02-15T04:57:47.250 に答える