私が持っていると言う...
function one($x){
return $a + $x;
}
function two(){
$a = 5;
echo one(3);
}
これは答え「8」または「3」を示しますか?言い換えれば、関数1は$ aの値を取得しますか、それともどこかでグローバルに宣言する必要がありますか?
NB私はまだ試していませんが、なぜそれが何らかの形で機能するのかを理解するためにここでお願いしています。
私が持っていると言う...
function one($x){
return $a + $x;
}
function two(){
$a = 5;
echo one(3);
}
これは答え「8」または「3」を示しますか?言い換えれば、関数1は$ aの値を取得しますか、それともどこかでグローバルに宣言する必要がありますか?
NB私はまだ試していませんが、なぜそれが何らかの形で機能するのかを理解するためにここでお願いしています。
one
について知らない関数はありません$a
。しかし、これは可能です。
$a = 5;
function one($x){
global $a;
return $a + $x;
}
function two(){
global $a;
$a = 5;
echo one(3);
}
今two()
は反響するだろう8
関数は、それらを呼び出す関数に固有のスコープではありません。(また、デフォルトでグローバル変数を継承しません-それがglobal
キーワードの目的です。)
したがって、$a
内部では完全に未定義にone()
なり、通知が届きます。
詳細については、PHPマニュアルの「変数スコープ」ページを参照してください。
あなたは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
例に近いクラスを使用する場合、グローバルな使用法がないことに注意してください。変数$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
?>