web-dev-qa-db-ja.com

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

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

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

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

誰かがそれに関する問題を修正するのを手伝ってくれる?

7
Anand Mistry

最初のエラー($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にアクセスすることはできません。できれば、グローバルと同じです。

6
meagar

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

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

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

1
R R

変数globallyを使用する2つのケースがあります。

  1. その変数の単一のコピーを使用して、任意の場所から変更します。つまり、関数内または外部から、つまりグローバルスコープ内から変更します。その場合、global $x;の形式で許可された関数のセットの宣言が必要です。
  2. グローバル変数に使用されるsame identifierを使用して個々の関数にローカル変数が必要な場合(つまり、すべての関数の外部の変数);その場合、同じ名前の2つの変数があります。つまり、その関数に対して1つのローカルと1つのグローバルがあります。次に、superglobal変数$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";
?>

[〜#〜] reference [〜#〜]の場合

1
Rajesh Paul

PHPグローバル変数は、関数内で使用する場合、関数内でグローバルに宣言する必要があります。

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

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

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

0
gvgvgvijayan