ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクトへの再帰参照によって引き起こされるメモリ リークの分析、PHP recursion_PHP チュートリアル

PHP オブジェクトへの再帰参照によって引き起こされるメモリ リークの分析、PHP recursion_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:19:55898ブラウズ

PHPオブジェクトへの再帰参照、PHP再帰によって引き起こされるメモリリーク分析

一般的に、PHP オブジェクトへの再帰参照がある場合、メモリ リークが発生します。このバグは PHP に長い間存在していました。まずこのバグを再現してみましょう。サンプルコードは次のとおりです。

リーリー
上記のコードを実行すると、メモリ使用量は変更されないはずですが、実際には増加し続けており、設定解除が完全には有効になっていないことがわかります。

現在の開発の多くはフレームワークに基づいています。アプリケーションには複雑なオブジェクトの関係があるため、そのような問題が発生する可能性があります。どのような方法が考えられるかを見てみましょう。

リーリー

方法は少し醜かったですが、最終的には対処されました。幸いなことに
このバグは PHP5.3 の CVS コードで修正されています

この点については、PHP プログラムを設計するときに注意する必要があります。この記事で説明されている内容は、皆様の PHP プログラム設計にとって一定の参考になると思います。

PHP再帰の説明

関数デモには 2 つの必然的な出力ステートメントがあり、1 つは最初のステートメント、もう 1 つは最後のステートメントです。
関数実行プロセス

1. numを出力する
2. numが0より大きいかどうかを判定して、関数を呼び出すかどうかを決定します
3. numが0より大きい場合、関数が呼び出されるたびにのみ出力されます。ステップ 2 を実行して待機します。 2 番目のステップは自分自身を呼び出して結果を返した後、実行を継続します。 したがって、自分自身を呼び出して戻るたびに、num が再度出力されます。つまり、後続の値が逆の順序で出力されます。




php再帰呼び出し

それでは、少しだけ説明します
SQL ステートメントを記述するときは、すべての mysql 関数を大文字にするのが最善です。こうすることで、SQL ステートメントが一目瞭然になり、わかりやすくなります。
例: $sql = "SELECT * FROM `user` WHERE `id` = '$id'";


そして、テーブル名とフィールド名はすべて ` 1 (英語の下のドット) の隣のドットで囲まれます。 input メソッド) を指定し、文字列型であっても数値型であっても、フィールドによってコピーされる変数は ' 一重引用符
で囲む必要があります。これは非常に有益です。 。 。 。 。




http://www.bkjia.com/PHPjc/871099.html

www.bkjia.com

http://www.bkjia.com/PHPjc/871099.html技術記事 PHP オブジェクトへの再帰参照によって引き起こされるメモリ リークの分析 PHP 再帰 一般に、PHP オブジェクトへの再帰参照がある場合、メモリ リークが発生します。このバグは PHP に長い間存在していました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。