1

このような継承された静的変数で設定されたオブジェクトを使用するスクリプトで、メモリの問題が発生しています。

class a
{
    public static $a = "a";
}

class b extends a
{
    private $instanceVar = 'hey';
    private $otherVar = 'you';

    public function DoStuff()
    {
        echo self::$a;
    }
}

次に、このようなクラスを使用するコード

while(condition)
{
    $obj = new b();
    $obj -> DoStuff();
    unset($obj);
}

私の質問は、obj の設定を解除すると、継承された静的変数への参照も保持されるため、ガベージ コレクションとそのインスタンス変数の設定解除がトリガーされるのでしょうか?

4

2 に答える 2

2

unsetこのコードでは何ももたらされません。

それがある場合とない場合で、オブジェクトは可能な場合に正常に収集されます。

objトリガーガベージコレクションの設定を解除します

そうではありません。ガベージコレクターは、意味があるときに自動的に呼び出されます。

継承された静的変数への参照も保持しているため

そうではありません。オブジェクトは静的プロパティへの参照を保持しません。

于 2012-11-22T02:55:40.447 に答える
-1

GC に関心があり、PHP >= 5.3.0 を使用している場合は、 gc_collect_cyclesと一般的なガベージ コレクションを参照してください。

于 2012-11-22T06:41:40.263 に答える