2012-05-09 38 views
0

は私が持っていると言うスコープ... PHP関数変数

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

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

はこれが答え "8" または "3" に表示されますか?言い換えれば、関数は$ aの値を得るか、どこかグローバルに宣言する必要がありますか?

N.B.私はまだそれを試していないが、私はそれが一方的に働くのか、それとも他のものであるのかを理解するためにここでそれを求めている。

+1

の代わりに、あなたの関数がパラの多くを必要とするポイントを得る場合は、それをパラメータとして渡す必要はGlobal' '使用クラスを作成する必要があります。その後、すべてのプロパティがそのメソッドで使用できます。あなたのコードを醜いものにしてはいけません! –

+0

@LawrenceCherone私は、実際にクラスを使用する例を挙げることができますか? –

+0

これは少し幅があります。ソフトウェア設計に関する基本的な質問に戻り、1つの例ではほとんど答えられません。次のような質問から始めてください:http://stackoverflow.com/questions/5861163/php-function-design-passing-parameters – deceze

答えて

3

機能なしがone$aを知らない:$aは機能oneの範囲に定義されていないされていない、とあなたがそれを読み取ろうとするので、あなたはご注意を取得します。しかし、これを行うことができます。

$a = 5; 

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

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

two()は、あなたがあなたの例に限り近いクラスを使用する場合は、8

+0

'global'スコープの使用はもちろんあなたがしたいことではありません。制限された関数スコープは、 'global'を使って"回避 "する必要があるものではなく、あなたの利点に働く*機能*です。 – deceze

+0

@Broncha私の変数$ aは関数2で宣言する必要があります。どうすればいいですか? –

+0

これは単なる質問に対する答えです。彼は自分の持つことが可能かどうかを尋ねました。私は、これが彼が求めていたことが可能であると答えました。これを行う他の方法はOOPであり、クラス変数とメンバメソッドを定義します。 – Broncha

1

関数は、それを呼び出す関数の本来の有効範囲ではありません。 (NOR彼らは、デフォルトでグローバル変数を継承しない - 。それはglobalキーワードが何のためにあるのかだ)

したがって、$aone()の完全未定義の内側になり、あなたはそれについての通知を取得します。

詳細については、PHPマニュアルのVariable Scopeページを参照してください。

1

あなたは8または3を取得しません。

PHP Notice: Undefined variable: a in - on line 3 
PHP Stack trace: 
PHP 1. {main}() -:0 
PHP 2. two() -:11 
PHP 3. one() -:8 
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 
?> 
+0

多くのありがとう - これは多くの助けになるかもしれません –