検索
ホームページバックエンド開発PHPチュートリアルPHPの静的変数について詳しく解説

PHPの静的変数について詳しく解説

Mar 16, 2018 pm 01:52 PM
phpstatic詳しい説明

静的変数の型指定子は静的です。静的変数は静的ストレージ方式に属し、そのストレージスペースはメモリ内の静的データ領域です (ストレージユニットは静的ストレージ領域に割り当てられます)。この領域のデータは、実行期間全体を通じて常にこれらのストレージスペースを占有します。プログラムが終了するまで(プログラムの実行期間全体が解放されない)、そのメモリアドレスはプログラム全体が終了するまで変更されないままであると考えることもできます(逆に、 auto 自動変数、つまり動的ローカル変数は動的ストレージ カテゴリに属し、動的ストレージ領域を占有し、関数呼び出しが完了すると解放されます)。静的変数はプログラムの実行中に常に存在しますが、その範囲外では使用できません。

また、静的保存メソッドに属する変数は必ずしも静的変数であるとは限りません。 例: 外部変数 (PHP ではグローバル変数と呼ばれます) は静的ストレージ メソッドですが、静的外部変数または静的グローバル変数になる前に、必ずしも静的変数である必要はありません。

すべてのグローバル変数は静的変数であり、ローカル変数は、型修飾子 static を使用して定義されている場合にのみローカル静的変数です。

静的変数はどこにでも適用できます。アプリケーションが成功すると、他の同じアプリケーションは受け入れられなくなります。

静的変数は、値を変更できないという意味ではありません。値を変更できない量は定数と呼ばれます。 保持する値は変更可能であり、最新の状態を保ちます。関数が呼び出されて終了しても変化しないため、静的であると言われます。つまり、最後に関数を呼び出したときに静的変数に特定の値を割り当てた場合、その値は次回関数が呼び出されたときも変更されません。

1. 静的ローカル変数:

1. 静的型の内部変数は、auto 自動変数 (つまり、静的宣言のないローカル変数) と同じです。これらは変数を定義する場合にのみ使用できます。この変数が関数内で使用される場合、この 2 つのスコープは同じです。この 2 つの違いは、auto 自動変数が関数の呼び出しと終了時に存在し、消滅することです。静的クラスのローカル変数は存在しませんが、その変数が存在する関数が呼び出されるかどうかは関係ありません。ただし、変数は存在し続けますが、使用することはできません。それを定義する関数が再度呼び出された場合、その関数は引き続き使用でき、前回の呼び出し後に残った値は保存されます。つまり、静的型の内部変数は、特定の関数内でのみ使用できるが、常に記憶領域を占有する変数です。

2. 関数本体で静的変数を定義しているときに初期化が実行された場合、プログラムは今後初期化操作を実行しません (関数内に出現する基本型の静的変数初期化ステートメントは最初の呼び出しでのみ実行されます)。自動変数への初期値の代入は、関数が呼び出されるたびに実行され、代入ステートメントを実行するのと同じになります。

3. 静的ローカル変数の初期化式は、定数または定数式である必要があります。ローカル静的変数が初期値なしで定義されている場合でも、システムは自動的に初期値 0 (数値変数の場合) または null 文字 (文字変数の場合) を割り当てます。静的変数の初期値は 0 です。自動変数 auto は、初期値が代入されていない場合、その値は不定な値となります。

4. 関数が複数回呼び出され、呼び出し間で特定の変数の値を保持する必要がある場合は、静的ローカル変数を検討できます。上記の目的を達成するためにグローバル変数を使用することもできますが、グローバル変数は予期しない副作用 (主に変数のスコープによって引き起こされる) を引き起こす場合があるため、ローカル静的変数を使用することをお勧めします。

注: ローカル静的変数はメモリ内で長時間を消費し、可読性が低いため、必要な場合を除き、ローカル静的変数の使用は避けてください。

2. 静的グローバル変数

グローバル変数 (外部変数) の宣言の前に static を付けて、静的グローバル変数を形成します。

グローバル変数自体は静的格納メソッドであり、静的グローバル変数も当然静的格納メソッドです。

保管方法に関しては、両者に違いはありません。

2 つの違いは次のとおりです:

1. 非静的グローバル変数の範囲はソース プログラム全体です。ソース プログラムが複数のソース ファイルで構成される場合、非静的グローバル変数は各ソース ファイル内で有効になります。

2. 静的グローバル変数はスコープを制限します。つまり、変数が定義されているソース ファイル内でのみ有効であり、同じソース プログラムの他のソース ファイルでは使用できません。

上記の分析からわかるように——

ローカル変数を静的変数に変更すると、その保存方法が変更され、つまり、その有効期間が変更されます。
グローバル変数を静的変数に変更すると、そのスコープが変更され、その使用範囲が制限されます。 static 静的変数は、スタックに割り当てられるのではなく、プログラムのグローバル ストレージ領域 (つまり、プログラムのグローバル データ領域) に配置されるため、スタック オーバーフローは発生しません。これにより、次回呼び出されたときに元の割り当てが維持されます。これがスタック変数やヒープ変数との違いです。

3. PHP に適用

<?php
//--------------如何理解static静态变量-----------
 
/** 普通局部变量 */
function local() {
    $loc = 0; //这样,如果直接不给初值0是错误的。
    ++$loc;
    echo $loc . &#39;<br>&#39;;
}
local(); //1
local(); //1
local(); //1
echo &#39;===================================<br/>&#39;;
 
/** static静态局部变量 */
function static_local() {
    static $local = 0 ; //此处可以不赋0值
    $local++;
    echo $local . &#39;<br>&#39;;
}
static_local(); //1
static_local(); //2
static_local(); //3
//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。
echo &#39;=======================================<br>&#39;;
 
/** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */
function static_global() {
    global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想当然的写上"static"加以修饰,那样是错误的.
    $glo++;
    echo $glo . &#39;<br>&#39;;
}
static_global(); //1
static_global(); //2
static_global(); //3
?>

関連する推奨事項:

php: 静的変数と通常の変数の違いの分析

静的静的ローカル変数と静的グローバル変数の違いを詳しく解説

PHPの静的変数

以上がPHPの静的変数について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

PHPセッションからデータをどのように取得しますか?PHPセッションからデータをどのように取得しますか?May 01, 2025 am 12:11 AM

toretrievedatafrompsession、Startthessession withsession_start()andAccessvariablesshe $ _SessionArray.forexample:1)Startthessession:session_start()

セッションを使用してショッピングカートを実装するにはどうすればよいですか?セッションを使用してショッピングカートを実装するにはどうすればよいですか?May 01, 2025 am 12:10 AM

セッションを使用して効率的なショッピングカートシステムを構築する手順には、次のものがあります。1)セッションの定義と機能を理解します。セッションは、リクエスト全体でユーザーのステータスを維持するために使用されるサーバー側のストレージメカニズムです。 2)ショッピングカートに製品を追加するなど、基本的なセッション管理を実装します。 3)製品の量管理と削除をサポートし、高度な使用状況に拡大します。 4)セッションデータを持続し、安全なセッション識別子を使用することにより、パフォーマンスとセキュリティを最適化します。

PHPでインターフェイスをどのように作成して使用しますか?PHPでインターフェイスをどのように作成して使用しますか?Apr 30, 2025 pm 03:40 PM

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

crypt()とpassword_hash()の違いは何ですか?crypt()とpassword_hash()の違いは何ですか?Apr 30, 2025 pm 03:39 PM

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?PHPのクロスサイトスクリプト(XSS)をどのように防ぐことができますか?Apr 30, 2025 pm 03:38 PM

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。