4

私はすでにしばらくの間、静的変数がメモリの使用に関してどのように機能するのか疑問に思っていましたが、それを実際に考慮する必要がありますか?

静的変数は、クラス自体のインスタンスの数に関係なく、メモリの1つの領域のみを使用することを理解しています。したがって、この意味では、賢明なメモリ消費にも静的変数を使用するのが賢明ですよね?しかし、静的変数のメモリ使用量について話している人に出くわしたことはありません(データをさまざまなインスタンスと共有できることだけです)。

例えば:

class Something () {
    static $DB = null;
    __construct ($DB) {
        $this->DB = $DB;
    }
}

このクラスのインスタンスを10個作成すると、非静的な$ DB変数を使用する場合よりも、生成されるメモリ使用量が少なくなります。

もしそうなら、効果はとても小さいので、それは本当に問題ではありませんか?

4

4 に答える 4

3

そしてそれも本当に考慮されるべきでしょうか?

staticいいえ、その理由でsについて心配する必要はありません。

の使用について心配する必要がある理由staticは、コードを単体テストできなくなり、クラスとコードをSomething::DB(つまり、Somethingクラス)に緊密に結合し、グローバル状態で作業しているという事実です。

また、これらの「グローバル」インスタンスを処理する方法についての以前の回答も確認してください。関数内の構成にアクセスするためのベストプラクティスはどれですか。

于 2012-07-25T09:41:45.510 に答える
2

あなたの場合、あなたのソフトウェア設計を再考してください。静的変数を使用する場合-dbオブジェクトの単一インスタンスを作成するためにシングルトンパターンを使用するように、再作成せずに、ある場所から何かにアクセスできるようにしようとしています(そうでない場合は、なぜ静的が必要ですか?)。

しかし、メモリ使用量について話している場合、そうです、より多くのオブジェクトを作成し、変数を複製すると、より多くのメモリが必要になりますが、静的かどうかについてメモリ使用量に実際の変化はありません。

于 2012-07-25T09:45:22.103 に答える
1

はい、クラスの静的属性はメモリの単一インスタンスに格納されます。

しかし、それは変数を静的として持つことを決定する際の懸念事項ではありません。これらは、クラスのインスタンスのカウントを保持するなど、クラスレベルの情報に使用されます。

静的変数をいつ使用するかについては、次のStackoverflowの投稿をご覧ください。

于 2012-07-25T09:42:39.830 に答える
0
  1. あなたは使用する必要があります

    self :: $ DB

静的変数にアクセスする($thisクラス全体のコンテキストでは意味がないため)

  1. staticそのクラスのすべてのオブジェクトが共有するものに使用する必要があります。

  2. コンストラクターのパラメーターを使用して静的変数を作成しないでください。そうすることで、そのタイプの新しいオブジェクトを作成するときに静的変数が上書きされます

于 2012-07-25T09:47:37.280 に答える