2012-03-10 19 views
3

PHPで以下のようなことを達成する方法はありますか?外部関数から関数のローカル変数にアクセスする(PHP)

function outside() { 
    $variable = 'some value'; 
    inside(); 
} 

function inside() { 
    // is it possible to access $variable here without passing it as an argument? 
} 
+2

を参照してください。私を信じて - それらを使用しないでください。彼らはすべてのコードが災害になることを見つけるすべてのものを使い始めるならば、ニッチな状況にのみ最適です。 –

+0

あなたが達成しようとしていることを説明できるのであれば、クールなクルージュ、またはb)それを達成するための適切な方法を思い付くかもしれません。 – Jake

+1

私はこの特定の状況をいくつかのコードを見ながら考えるようになり、考えましたそれについて質問すると、さまざまなスコープについてより明確な視点を得るのに役立ちます。それはした! – hsdev

答えて

1

これはできません。 $variableがグローバル変数の場合は、globalキーワードでアクセスできます。しかし、これは機能している。あなたはそれにアクセスすることはできません。

$GLOBALS配列でグローバル変数を設定することで実現できます。しかし、再び、あなたはグローバルな文脈を利用しています。

function outside() { 
    $GLOBALS['variable'] = 'some value'; 
    inside(); 
} 

function inside() { 
     global $variable; 
     echo $variable; 
} 
1

いいえ、引数として渡さずに、関数のローカル変数に別の関数からアクセスすることはできません。

これには変数globalを使用できますが、変数はローカルには残りません。

0

関数内でローカル変数にアクセスすることはできません。変数は、グローバル

function outside() { 
global $variable; 
    $variable = 'some value'; 
    inside(); 
} 

function inside() { 
global $variable; 
    echo $variable; 
} 

これは、あなたが(あなたのアプリケーションに変数を使用して変更されている他にどこあなたが知っていることはありません)を制御することはできませんとしてグローバルなキーワードを使用することは、賢明ではないことを

2

ノートに動作を設定する必要があります。クラスを使用している場合は、作業が楽になります!

class myClass { 
    var $myVar = 'some value'; 

    function inside() { 
     $this->myVar = 'anothervalue'; 
     $this->outside(); // echoes 'anothervalue' 
    } 

    function outside() { 
     echo $this->myVar; // anothervalue 
    } 
} 
1

これはできません。これはglobalを使って行うことができます。あなただけの唯一のパラメータを定義する必要はありませんが、関数の内部で、それを与えることができれば、あなたは使用することができます。

function outside() { 
    $variable = 'some value'; 
    inside(1,2,3); 
} 

function inside() { 
    $arg_list = func_get_args(); 
    for ($i = 0; $i < $numargs; $i++) { 
     echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; 
    } 
} 

をそのために誰もがあなたがグローバル変数を使用することができますを言っていたとしても、PHPマニュアルfunct_get_args()

+0

funct_get_args()関数については知らなかったが、状況によってはかなり役に立ちます。ありがとう! – hsdev

関連する問題