ホームページ  >  記事  >  バックエンド開発  >  「:=」でのグローバル変数の代入動作

「:=」でのグローバル変数の代入動作

PHPz
PHPz転載
2024-02-09 14:50:25700ブラウズ

「:=」でのグローバル変数の代入動作

php エディタ Xiaoxin は、「:=」でのグローバル変数の代入動作を紹介します。 PHP の以前のバージョンでは、グローバル変数への代入はキーワード「global」を使用して宣言する必要がありました。ただし、PHP バージョン 7.4 では、グローバル変数の割り当てに新しい構文「:=」が導入されたため、「global」キーワードを使用する手順を省略して、グローバル変数に値をより簡潔に割り当てることができます。この新機能により、コードの可読性と保守性が向上するだけでなく、不要なコードの量が削減され、グローバル変数の操作がより便利になります。この新機能を詳しく見てみましょう!

質問内容

コードが main 関数 スコープで := を使用している場合でも、グローバル level は依然としてgetlevel() 戻り値から割り当てられた値。誰かが言語仕様を使用してこれがどのように予測可能で文書化された動作であるかを説明できますか。私の考えは、仕様をもっとよく読むことでしたが、明らかにそれをしませんでした。

コード: https://go.dev/play/p/4pz0vl-2snn

65bcfadd4058

出力: -

info <nil>
print: info

回避策

あなたの例では、:= は実際に level という名前の新しいローカル変数を導入します。これは 仕様に従っています、グローバル スコープは関数スコープとは異なるため:

短い変数宣言は、変数が元々同じブロック (ブロックが関数本体の場合は引数リスト) 内で同じ型で宣言されていた場合に限り、変数を再宣言できます。

上記のような動作が発生する理由は、level の使用が実際にはグローバル変数を参照していないためです。 main での使用は := から追加されたローカル変数であり、print での使用は関数のパラメーターです。 (宣言および呼び出しサイト内の) パラメーターを削除すると、printprint: の後に空の文字列を出力することがわかります。

以上が「:=」でのグローバル変数の代入動作の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。