ホームページ バックエンド開発 PHPチュートリアル php_PHP チュートリアルでの global と $GLOBALS の違いの分析

php_PHP チュートリアルでの global と $GLOBALS の違いの分析

Jul 13, 2016 am 10:56 AM
global php 書き方 分析する 違い そして 持っている 友人

これら 2 つは実際には書き方の違いであると言う人もいました。必要な友達は、具体的に参照してください。

公式説明によると

1.$GLOBALS['var'] は外部グローバル変数そのものです。

2.global $var は、外部 $var と同じ名前の参照またはポインターです。

まず以下の例を見てください:

例を挙げてみましょう:

コードは次のとおりです コードをコピー
$var1 = 1; $var2 = 2; 関数テスト(){
$GLOBALS['var2'] = &$GLOBALS['var1']; }
テスト(); $var2 をエコーし​​ます。 ?>



通常の印刷結果は1です
コードは次のとおりです

コードをコピー $var1 = 1; $var2 = 2; 関数テスト(){ グローバル $var1,$var2; $var2 = &$var1; }
テスト(); $var2 をエコーし​​ます。 ?>







予期しない印刷結果は 2 です

印刷結果が 2 になるのはなぜですか?実際には、$var1 の参照が $var2 の参照アドレスを指しているためです。結果として、実際の値は変わりません

PHP の関数によって生成された変数は関数のプライベート変数であることは誰もが知っていますが、グローバルによって生成された変数はこの規則を回避できないのはなぜでしょうか。次のコードを見てください。

PHPコード

コードは次のとおりです

コードをコピー


関数テスト() {

グローバル $a;

unset($a); } テスト(); ?>
$a = 1; $a を印刷します;

充実効果は次のとおりです:
1

なぜ 1 が出力されるのですか? $aの設定が解除されていませんか?設定解除に失敗しましたか? PHPのバグ?
いいえ、実際には、unset は機能します。テスト関数の $a を unset します。関数の後に追加できます。 $a を印刷します;
つまり、globalはテスト関数の外側の$aと区別するために、テスト関数の外側の$aに対してエイリアス変数「$a」を生成します
次に、上記の例 1 に戻って、test_global のコード「$var2 =& $var1;」を見てください。つまり、$var2 は var1 が指す物理メモリ アドレスを指します
。 したがって、関数内の global と $GLOBALS[] の違いは次のとおりであるという結論を導き出します:
global は、関数の実際の外部変数ではなく、関数の外部変数を指すエイリアス変数を関数内に生成します。エイリアス変数が指すアドレスが変更されると、例 1 のような予期しない状況が発生します。 .
$GLOBALS[] は確かに外部変数と呼ばれ、関数内外で常に一貫性を保ちます。

次の 2 つの例を比較できます:

コードは次のとおりですコードをコピーグローバル:
関数 myfunction(){
グローバル $bar;
unset($bar);
}
$bar="何か";
myfunction();
エコー $bar;
?>
出力: 何か
$グローバル[]:
関数 foo()
{
unset($GLOBALS['bar']);
}
$bar = "何か";
foo();
エコー $bar;
?>
出力: 空
PHP のグローバル変数は C 言語とは少し異なります。C 言語では、ローカル変数でカバーされていない限り、グローバル変数は関数内で有効になります。これにより、誰かが不用意にグローバル変数を変更してしまう可能性があるため、問題が発生する可能性があります。 PHP のグローバル変数を関数で使用する場合は、グローバル変数を宣言する必要があります。

グローバルの適用例

コードは次のとおりですコードをコピー
$a = 1;

$b = 2;

関数Sum()

{
グローバル $a、$b;

$b = $a + $b;

}

合計();

エコー $b;
?>

上記のスクリプトの出力は「3」になります。グローバル変数 $a と $b は関数内で宣言されており、任意の変数のすべての参照変数はグローバル変数を指します。

別の例を見てみましょう。

コードは次のとおりですコードをコピー
$var1 = 1; 関数テスト(){
unset($GLOBALS['var1']); }
テスト(); $var1 をエコーし​​ます。 ?>




$var1 が削除されているため、何も出力されません。

コードは次のとおりです

コードをコピー グローバル $var1; unset($var1); } テスト(); $var1 をエコーし​​ます。 ?>
$var1 = 1; 関数テスト(){



誤って印刷された 1.これは、エイリアス参照だけが削除され、値自体は何も変更されていないことを示しています。

グローバルな問題分析:
質問: config.inc.php でいくつかの変数 ($a) を定義し、他のファイルの関数の外側に ("config.inc.php") を含めました。これらの変数 $a がある場合は、関数内で使用する必要があります。宣言がない場合、echo $a は何も出力できません。そこで、global $a を宣言しますが、関数も変数もたくさんありますので、このように繰り返し宣言することはできませんよね。何か良い解決策があればアドバイスをお願いします。
回答1: まず、config.inc.php で定数を定義します: (定数名、定数値) を定義します
次に、使用する必要がある他の場所で「config.inc.php」を要求します。
その後、この定数をこのファイル内で直接使用できます。
回答 2: $x[a]、$x などの配列を定義して、グローバル $x を宣言するだけで済むようにする方法もあります。
回答 3: あなたの方法を試しましたが、うまくいきませんでした。
回答 4: php.ini ファイルを変更します。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632142.html技術記事一部の友人は、これら 2 つは実際には書き方の違いであると言いました。ここで、global と $GLOBALS の違いを証明します。必要な場合は、具体的な参考として参照してください。 公式説明によると…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語関数の基本的な要件は何ですか C言語関数の基本的な要件は何ですか Apr 03, 2025 pm 10:06 PM

C言語関数は、コードモジュール化とプログラム構築の基礎です。それらは、宣言(関数ヘッダー)と定義(関数体)で構成されています。 C言語は値を使用してパラメーターをデフォルトで渡しますが、外部変数はアドレスパスを使用して変更することもできます。関数は返品値を持つか、または持たない場合があり、返品値のタイプは宣言と一致する必要があります。機能の命名は、ラクダを使用するか、命名法を強調して、明確で理解しやすい必要があります。単一の責任の原則に従い、機能をシンプルに保ち、メンテナビリティと読みやすさを向上させます。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? Apr 04, 2025 pm 11:15 PM

JavaScriptのDOMノードの下でのXpath検索方法の詳細な説明、XPath式に基づいてDOMツリーから特定のノードを見つける必要があることがよくあります。あなたがする必要があるなら...

CとC#の違いと接続は何ですか? CとC#の違いと接続は何ですか? Apr 03, 2025 pm 10:36 PM

CとC#には類似点がありますが、それらは完全に異なります。Cはプロセス指向の手動メモリ管理、およびシステムプログラミングに使用されるプラットフォーム依存言語です。 C#は、デスクトップ、Webアプリケーション、ゲーム開発に使用されるオブジェクト指向のガベージコレクション、およびプラットフォーム非依存言語です。

See all articles