ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルのグローバル変数のスコープ

PHP_PHP チュートリアルのグローバル変数のスコープ

WBOY
WBOYオリジナル
2016-07-13 16:56:55969ブラウズ

最近、Discuz! プラグインを開発していましたが、バックグラウンドでプラグインの変数データを呼び出したときに、何度かテストした結果、無効になりました。 , キャッシュをロードしてはいけないことを突然思い出したので、Loadcache('plugin') がプラグインのキャッシュをロードするように結合しました。しかし、問題はまだ残っています。

呼び出す必要があるのは関数 (とりあえず関数 A とします) であり、グローバル変数を呼び出すために $_G; が実行されており、print_r を介して $_G を出力することで、データが存在することも確認されます。 $_G 不足しているのはプラグインのキャッシュです。関数Aもフロントデスクで呼び出す必要があります。フロントデスクはplugin.phpのシェルで覆われており、プラグインキャッシュがロードされているため、loadcache('plugin')を実行する必要はありません。関数内でのloadcache('plugin')操作の実行は、実行効率に影響します。

問題を再度分析すると、バックグラウンドで関数 A を呼び出すためのコードが別の関数にあります (とりあえず関数 B とします)。変数の内容を変更するには、この関数内で global $_G; を実行すればよいのではないかと思いました。バックグラウンドでロードされます 関数 B から関数 A に渡されますか?

試してみようという気持ちで、関数 B に global $_G; も追加してみました。

これにより、グローバル スコープの範囲の問題が生じます。今回のデバッグでは、関数Aが関数Bから呼び出されるため、バックグラウンドで呼び出されるloadcache('plugin');で生成された新しい$_Gはバックグラウンド部分でのみ有効であり、関数内ではグローバル$_Gが使用されていないため、 B, したがって、最新の $_G は取得されません。関数Aのファイル参照(require)を関数Bに記述しました。 関数Aは関数Bのサブセットになります。 バックグラウンドコードで実行されるloadcacheのグローバル変数は関数Aでは無効です。 関数Aのglobalで取得した$は _G value は私が書いたロードキャッシュをバイパスします。したがって、関数 A で有効になる前に、関数 B で global を 1 回実行して、最新の $_G 値を取得する必要があります。

以下は、「global」キーワードを使用したデモンストレーションの例です:

コードは次のとおりです コードをコピー
$my_var = 'Hello World';
test_global();
関数 test_global() {
// 現在はローカルスコープ内にあります
// $my_var 変数は存在しません
// エラーが発生します: "未定義の変数: my_var"
エコー $my_var;
// 次に、変数を重要視しましょう
グローバル $my_var;
// 作品:
エコー $my_var;
}
?>

上記の例でわかるように、「global」キーワードはグローバル変数をインポートするために使用されます。効果があるみたいですね

よくできていて非常にシンプルですが、グローバル データを定義するために「global」キーワードを使用することについてなぜ心配する必要があるのでしょうか

この業界に不慣れな方向けに、グローバル変数の使い方について説明します。「グローバル変数」、この用語では 2 つのグローバルです

という単語から、この変数がどこでも使用できることがわかります。まず例を見てみましょう。

コードは次のとおりですコードをコピー

結果: 3

グローバル変数globalがないとメソッド内で$aと$bの値を取得できないので、メソッド内で外部変数を使いたい場合は

この変数を使用するには、最初にこの変数をグローバル変数として宣言する必要があります。これは非常に便利です。

$a = 1;
$b = 2;

関数Sum()

{
Global $a, $b; //内部でグローバル変数として宣言します

$b = $a + $b;

}

合計();

エコー $b;
?>

コードは次のとおりです コードをコピー

$w3sky = 1;
$w3sky2 = 2;

関数Sum()
{
グローバル $w3sky, $w3sky2;$w3sky2 = $w3sky + $w3sky2;
}合計();
エコー $w3sky2;
??>

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

参照変数はグローバル変数を指します

www.bkjia.com本当http://www.bkjia.com/PHPjc/631549.html技術記事最近、Discuz! プラグインを開発していましたが、バックグラウンドでプラグインの変数データを呼び出したときに、何度かテストした結果、無効な値が返されました。 、そういえば…とふと思い出しました
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。