/ / PHPの未定義変数エラーを修正するにはどうすればよいですか? -php、エラー処理、コンパイラエラー、構文エラー、ランタイムエラー

PHPで未定義の変数エラーを修正するにはどうすればよいですか? - PHP、エラー処理、コンパイラエラー、構文エラー、ランタイムエラー

今日、私は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";
?>

ブラウザでこのファイルを実行すると、次のエラーが見つかりました。

Notice:未定義の変数:19行目の/opt/lampp/htdocs/anand/php/index.phpのx

Notice:未定義変数:29行目の/opt/lampp/htdocs/anand/php/index.phpのy

誰かがそれに関する問題を解決するのを手伝ってくれますか?

回答:

回答№1は5

最初のエラー($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 コードの後半で、それが定義されている関数の外側。可能であれば、グローバルと変わりません。


回答№2については2

$ 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";
?>

回答№3の場合は1

コードは期待どおりに動作しますが、スクリプト全体で両方の変数を使用する場合は、これを使用します

<?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";
?>

回答№4の場合は1
<?php
$a = 1; /* global scope */

function test()
{
echo $a; /* reference to local scope variable */
}

test();
?>

明示的に宣言しない限り、変数$ aはグローバル変数の値にアクセスできないため、最初のエラーが発生します。 global $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


回答№5の場合は1

変数を使用する2つのケースがあります 世界的に

  1. その変数の単一のコピーを使用して変更するどこからでも、つまり、関数内または外部から、つまりグローバルスコープ内からの変更。その場合、次の形式の許可された関数セットで宣言が必要です。 global $x;.
  2. 個々の関数にローカル変数が必要な場合 同じ識別子 グローバル変数に使用(つまり、すべての関数の外部の変数);その場合、同じ名前の変数が2つあります。つまり、その関数に対して1つのローカル変数と1つのグローバル変数があります。次に、使用する必要があります スーパーグローバル 変数 $GLOBALS つまり、すべてのグローバル変数の配列。私は個人的にこのアプローチを好んで効率的なコードを作成しています。

以下は、2つのコードです

code1(グローバル宣言を使用)

<?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";
?>

code2($ GLOBALS []配列を使用)

<?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";
?>

ために 参照


答え№6の場合は0

あなたは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)をチェックしてその出力をスキップするか、グローバルスコープでデフォルト値を割り当てます。


回答№7は0

PHPのグローバル変数は、関数内でグローバルに宣言されなければなりません。

function myTest()
{
$y=10; // local scope
global $x;
.....
}

関数内で$ x globalを宣言することにより、変数のグローバルバージョンを参照します