2011-09-16 5 views
0

文字列を引数にとり、その文字列と同じ名前の変数が設定されているかどうかを確認する関数が必要です。関数チェックのためのPHPスコープの問題isset

これは動作します...

$foo = 'foosuccess'; 
$property = 'foo'; 
if(isset($$property)){ 
echo $$property; 
} 

これは、テスト中の()ので、$$ property2が間違っスコープではありません。

$huh = 'huhsuccess'; 
$huh = test("huh"); 
function test($property2){ 
    if(isset($$property2)){ 
     echo $$property2; 
} 
} 

$$ property2が呼び出し元のコンテキストと同じスコープを参照するように関数を修正するにはどうすればよいですか?それは可能ですか?事前に

おかげで....

+0

データが関数スコープに表示される唯一の受け入れ方法は、引数を介して渡すことです。 – zerkms

+0

@zerkmsので、私がチェックしている変数への参照を渡す方法はありますか?私がそれを試してみる問題は、変数が最初に設定されていなければ、それを参照することができないということです。それが設定されている場合は、ポイントがありません... – jbd

+0

私は私の目的のためにそれを考え出したと思います(誰でも興味があれば...) //成功を得るためにコメントを外してください // $ huh = 'huhsuccess' ; $ huh = test($ huh); echo $ huh; 機能テスト(&$ property2){ if(isset($ property2)){ return $ property2; } else { \t return 'not set!'; } } ダイ; – jbd

答えて

-1

これはeval()で行うことができます。

$foo = 'foosuccess'; 
    $property = 'foo'; 
    if(eval('isset($'.$property.')'){ 
    echo $$property; 
    } 
+2

'変数スコープ 'が – zerkms

0

はこれを試してみてください。

$huh = 'huhsuccess'; 
test("huh"); 

function test($property2) { 
    global $$property2; 

    if(isset($$property2)) { 
     echo $$property2; 
    } 
} 
+0

でないと読んでみる必要がありますが、そうしても変数がグローバルスコープ。私はそれが呼び出し側のスコープ内にある必要があります。 (fwiw、これはベストプラクティスではないかもしれません...) – jbd

0
<?php 
function test($s) 
{ 
    return isset($GLOBALS[$s]); 
} 
0

[OK]を、私はそれを考え出したと思います私の目的のために(興味があれば...)