0

このphpプログラムを実行しようとしていますが、予期しない出力が表示されます。

<?php
$abc;
function test(){
    $abc="world";
}
test();
echo "hello ".$abc;?>

Output : hello
Expected output : hello world

私はphpを初めて使用します。このコードで私が犯した間違いを誰か教えてください。
私が外に出すならば、それ$abc="world"の範囲function test()がうまくいくことを私は知っています。
関数からグローバル変数に値を割り当てるにはどうすればよいですか?

4

5 に答える 5

2

$abcクラス内で定義してから、 を使用してアクセスできます$this

 <?php 
  class xyz {
   public $abc = '';
   function test(){
    $this->abc = "world";
  }
 }

$a = new xyz();
$a->test();
echo "hello ". $a->abc;
?>

デモ

于 2013-02-20T19:32:23.170 に答える
1

test()で編集している$ abcは、グローバルな$abcとは異なります。コードを希望どおりに修正するには:

<?php
$abc;
function test(){
    global $abc;
    $abc="world";
}
test();
echo "hello ".$abc;
?>
于 2013-02-20T19:18:20.557 に答える
1

グローバル変数を使用することは一般的に悪い習慣と考えられていますが、globalキーワードを使用してこれを行うことができます。

<?php
$abc;
function test(){
    global $abc;
    $abc="world";
}
test();
echo "hello ".$abc;?>
于 2013-02-20T19:17:20.460 に答える
1

$abcintestはローカルです。グローバル変数にアクセスする場合はglobal $abc、関数内で使用して指定する必要があります。

ここを参照

于 2013-02-20T19:17:20.750 に答える
1

次のように、グローバルな $abc 変数を使用することを PHP コンパイラに伝える必要があります。

$abc;
function test() {
    global $abc;
    $abc="world";
}
test();

php の変数のスコープは、javascript のスコープとは異なるためです。たとえば、そこからクロスオーバーした可能性があるためです。

関数内で定義された変数は、PHP のその関数に対して当然プライベートです。

于 2013-02-20T19:17:56.137 に答える