web-dev-qa-db-ja.com

PHPでは、使用後すぐにオブジェクトを削除する必要がありますか?

Larry UllmanによるPHP Advanced and Object Oriented Programmingを読んだところ、使用直後にオブジェクトを削除することは良いプログラミングの実践ですが、理由はどこにも与えられていません。

私は学生のWeb開発者であり、スクリプトが完了するとすぐにWebアプリケーションのオブジェクトが自動的に削除されます。したがって、手動で削除する理由はないようです。

だから、私の質問は、慣習に従って盲目的に他のものを使用した後に不要なオブジェクトを削除する良い理由は何ですか?

2
user88873

いいえ、PHPで使用した後にオブジェクトを削除する必要はありません。 PHPのガベージコレクションに任せてください。

may非常に特殊な状況でオブジェクトを使い終わった後で、オブジェクトの設定を解除すると、パフォーマンスの理由がわかりにくくなることがあります。しかし、そのようなケースは日常の出来事ではなく、あなたがそれらを見るとそれらは明らかになるでしょう。

1
GrandmasterB

PHPのGCは、5.3より前のバージョンではヒットとミスがあり、スクリプトが終了するまで、多くの配列とオブジェクトが解放できなくなりました。このため、PHP開発は基本的に、スクリプトが終了したときにのみvarsが解放されることが保証されているため、暗黙的に「誰でもGCを必要とする」という態度をとりました。

これを変更する2つのことが起こっています。

まず、PHPのGCは、他の配列のコピーを含む配列では信頼性が低いというところまで進んでいます。この問題が修正されると、PHPのGCは完全に機能し、信頼性が高まります。

第二に、PHPのpthread拡張機能がかなりうまくいっています。 PHPは今後数年以内に完全なスレッドをサポートし、長時間実行されるスクリプトを多くのJava appliations。

PHPが使用されています。たとえば、PHPベースのネットワークサービスを作成するための真剣な取り組みがすでに始まっています。 ( Ratchet など)これで、ほとんどの状況でGCが信頼できるようになりました。

つまり、簡単に言えば、PHPのリソースの形式をすべて解除する必要はありません。スクリプトが終了するとリソースがすべて解放されるためです。ただし、オブジェクトやその他のリソースの設定を解除するwill不要な各リソースがbeforeの前に解放されることを確認し、スクリプトが終了する可能性があります高度にコンテンツ化されたリソースを解放し、パフォーマンスを向上させます。

さらに、オブジェクトやリソースの設定を解除することは、近い将来標準になる可能性が高く、多くの場合絶対的な要件となります。

多くのPHPオブジェクト/リソースは、スクリプトが終了するまで範囲外になりません。これは、unset()が参照カウントが0に設定されていることを確認する唯一の方法であることを意味しますGCによる解放の候補になる(スクリプトが終了する前、つまり)。

1
JSON