今日、私はPHPを学び始めました。そして、さまざまな変数をテストするために最初のPHPファイルを作成しました。次のように私のファイルを表示できます。
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
このファイルをブラウザで実行したところ、次のエラーが見つかりました。
通知:未定義の変数:19行目の/opt/lampp/htdocs/anand/php/index.phpのx
通知:未定義の変数:/opt/lampp/htdocs/anand/php/index.phpの29行目のy
誰かがそれに関する問題を修正するのを手伝ってくれる?
最初のエラー($x
は未定義)は、グローバルがデフォルトで関数にインポートされないためです(「スーパーグローバル」とは対照的です)。
グローバル変数$x
を参照していることを関数に通知する必要があります。
function myTest()
{
global $x; // $x refers to the global variable
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
そうでない場合、PHPは、同じ名前のローカル変数でグローバル変数をシャドーイングしているかどうかを判断できません。
2番目のエラー($y
は未定義)は、ローカルスコープがローカルであるためです。重要なのは、$y
が関数から「リーク」しないことです。もちろん、後でコード内で、それが定義されている関数の外部に$y
にアクセスすることはできません。できれば、グローバルと同じです。
$ xをグローバルに設定
global $x;
またはこれを試してください
<?php
$x=5; // global scope
function myTest($x)
{
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest($x);
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
コードは期待どおりに動作しますが、スクリプト全体で両方の変数を使用する場合は、これを使用します
<?php
$x=5; // global scope
function myTest(){
global $x;
global $y;
$y=10;
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
_<?php
$a = 1; /* global scope */
function test()
{
echo $a; /* reference to local scope variable */
}
test();
?>
_
関数内で_global $a
_を明示的に宣言しない限り、変数$ aはグローバル変数の値にアクセスできないため、最初のエラーが発生します。
例1グローバルを使用する
_<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b; //if you want to access global variable if you have to use global keyword
$b = $a + $b;
}
Sum();
echo $b;
?>
_
$ yが関数mytest()
内で定義されているため、最後に発生しているエラーは、スコープがその関数のみに限定されるためです。
詳細な説明はこちらをご覧ください http://php.net/manual/en/language.variables.scope.php
変数globallyを使用する2つのケースがあります。
global $x;
の形式で許可された関数のセットの宣言が必要です。$GLOBALS
を使用する必要があります。つまり、すべてのグローバル変数の配列です。個人的には、効率的なコードを作成するためにこのアプローチを好みます。以下は、2つのコードです。
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
global $x;
echo "<p>Test variables inside the function:<p>";
echo "Variable x in global scope is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
<?php
$x=5; // global scope
function myTest()
{
$y=10; // local scope
$x=23;
echo "<p>Test variables inside the function:<p>";
echo "Variable x in global scope is: ".$GLOBALS['x'];
echo "<br>Variable x in local scope is: $x";
echo "<br>";
echo "Variable y is: $y";
}
myTest();
echo "<p>Test variables outside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
?>
PHPグローバル変数は、関数内で使用する場合、関数内でグローバルに宣言する必要があります。
function myTest()
{
$y=10; // local scope
global $x;
.....
}
関数内で$ x globalを宣言することにより、変数のグローバルバージョンを参照します
あなたはPHPで変数のスコープを学ぶ必要があります
http://php.net/manual/en/language.variables.scope.php
あなたのコードでは$ xはグローバルなものなので、関数内でその変数にアクセスするにはグローバル$ xを使用します。ある関数の最初に
function myTest()
{
global $x;
$y=10; // local scope
echo "<p>Test variables inside the function:<p>";
echo "Variable x is: $x";
echo "<br>";
echo "Variable y is: $y";
}
$ yの場合、isset($ y)をチェックしてその出力をスキップするか、グローバルスコープでデフォルト値を割り当てます。