2011-07-18 7 views
1

これはどうやってできるのだろうと思っていました。関数があります。PHP関数の可変変数

$sky = (a range of number 1 to 10); 


function condi($nnn){ 
    if($$nnn <= 1){ 
    echo 'Fails'; 
    } 
    elseif($$nnn <= 3){ 
    echo 'Respectable'; 
    } 
    elseif($$nnn <= 5){ 
    echo 'Decent'; 
    } 
    elseif($$nnn <= 7){ 
    echo 'Great'; 
    } 
    elseif($$nnn <= 9){ 
    echo 'Legendary'; 
    } 
    elseif($$nnn = 10){ 
    echo 'Ultimate'; 
    } 
} 

    condi('sky'); 

$ skyの値が何であっても、出力は失敗します。

私は$$ nnnの値が何であるかを調べることにしました。そして、$$ nnnに値がないことに気付きました。助けてください?

+0

変数変数は恐ろしいです使用する必要があります。それらを使用しないでください。 – ThiefMaster

+0

変数変数/動的変数が本当に必要な場合は、$ {$ nnn}と書くことで、実際に何をしようとしているのかを明確にすることができます。 –

答えて

2

$GLOBALS[$nnn]$$nnnを交換してください。

どのような変数名$nnnは含まれています - あなたは(global $$nnn;のようなものをやって、その後$$nnnを使用するよりもずっときれいです)$GLOBALS配列を経由して、それをアセスする必要があるので、それは関数に対してローカルではありません。

+0

+1私はこれと 'global $$ nnn;両方を有効な解決策としてupvotedしましたが、正しいです、これはよりクリーンです(変数が内部スコープに持ち込まれている限り、' $ GLOBALS [$ –

+0

@rudi_visser '$$ nn = $ GLOBALS [$ nnn];のように' global $$ nnn; 'とエイリアスの違いは何ですか?どのように他のものよりもクリーンですか?私は 'global $ o;'を使って、グローバルなスコープ付きの変数を(長い時間使っていない)インポートしています:S – Paulpro

+0

ありがとう、PHPにはまだかなり新しい:)よくうまくいきます! – Crays

-1

"nnn"変数に2つの$$記号があります。削除してください。

+4

質問のポイントがありません。 –

2

$skyはグローバルスコープである:

function condi($nnn){ 
    global $$nnn; 
    if($$nnn <= 1){ 
    ... 
+0

いいえ、それはさらに悪化しています。彼はグローバル化を望んでおらず、単にその機能に引数を渡そうとしているだけです(さもなければ、 'function'は役に立たないでしょう)。 –

+0

@Robert彼は関数に変数名を渡し、関数内からその変数(グローバルスコープ内)を利用したいと考えています。それは愚かな要求ですが、これは彼の問題を解決します。 –

+0

'$ GLOBALS'はよりクリーンになります。 – ThiefMaster

0

関数が$sky(私が目標としていると思う)を見るためには、関数のスコープ内で可視でなければなりません。グローバルはデフォルトでは表示されません。

関数内にglobal $$nnn;と言うか、代わりに$$nnn$GLOBALS[$nnn]に変更する必要があります。また、これはグローバルのみで動作することに注意してください。他の関数のローカルの名前を渡すことはできず、この関数にそれらを参照させることができます。

-1

あなたは

<?php 
$sky = rand(1, 5); 
function condi($nnn){ 
    global $sky; 
    switch ($$nnn) { 
     case $$nnn < 1: 
      echo "Fails"; 
      break; 
     case $$nnn < 3: 
      echo "Respectable"; 
      break; 
     case $$nnn <= 5: 
      echo "Decent"; 
      break; 
     // .................... // 
    } 
} 
condi('sky'); 
?> 
+0

このメソッドは正常に動作し、なぜdownvoteですか? –

+2

'global $ sky;'は変数変数の目的を、事前に何が含まれているのか知る必要がある場合には無効にします。 – Paulpro