0

私が持っていると言う...

function one($x){
     return $a + $x;
}

function two(){
     $a = 5;
     echo one(3);
}

これは答え「8」または「3」を示しますか?言い換えれば、関数1は$ aの値を取得しますか、それともどこかでグローバルに宣言する必要がありますか?

NB私はまだ試していませんが、なぜそれが何らかの形で機能するのかを理解するためにここでお願いしています。

4

4 に答える 4

2

oneについて知らない関数はありません$a。しかし、これは可能です。

$a = 5;

function one($x){
 global $a;
 return $a + $x;
}

function two(){
 global $a;
 $a = 5;
 echo one(3);
}

two()は反響するだろう8

于 2012-05-09T03:44:52.993 に答える
1

関数は、それらを呼び出す関数に固有のスコープではありません。(また、デフォルトでグローバル変数を継承しません-それがglobalキーワードの目的です。)

したがって、$a内部では完全に未定義にone()なり、通知が届きます。

詳細については、PHPマニュアルの「変数スコープ」ページを参照してください。

于 2012-05-09T03:43:24.813 に答える
1

あなたは8またはを取得しません3$a関数のスコープで定義されていないため、通知を受け取り、oneそれを読み込もうとします。

PHP Notice:  Undefined variable: a in - on line 3
PHP Stack trace:
PHP   1. {main}() -:0
PHP   2. two() -:11
PHP   3. one() -:8
于 2012-05-09T03:43:49.533 に答える
1

例に近いクラスを使用する場合、グローバルな使用法がないことに注意してください。変数$this->*を割り当てるだけで、クラス内のグローバルスコープとそのメソッド/関数に次のようにクラスの外部からアクセスすることもできます$functions->a

<?php 
Class functions{

    function one($x){
        return $this->a + $x;
    }

    function two(){
        $this->a = 5;
        echo $this->one(3);
    }

}

$functions  = new functions();

$functions->two(); //8

echo $functions->a;//5
?>
于 2012-05-09T04:11:42.647 に答える