2011-07-18 212 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

更換$$nnn$GLOBALS[$nnn]

無論變量名$nnn包含 - 所以你需要通過$GLOBALS陣列(比做這樣的事情global $$nnn;,然後使用$$nnn更清潔)接取它是不是本地的功能。

+0

+1我對這個和全局$$ nnn都贊成了,因爲它們都是有效的解決方案,但是你是對的,這是更清晰的(只要變量被引入內部範圍,使用'$ GLOBALS [$ nnn]'everywhere will be a eyesore :-) –

+0

@rudi_visser'global $$ nnn;'和別名'$$ nn = $ GLOBALS [$ nnn];'如何比另一個更清潔。我一直使用'global $ o;'來導入全局作用域變量(不是我用它們很多):S – Paulpro

+0

謝謝,PHP仍然很新穎:)工作得很好! – Crays

-1

在「nnn」變量中有兩個$$符號。刪除一個。

+4

你錯過了這個問題的關鍵。 –

2

$sky是在全球範圍內:

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

不,你正在變得更糟。他不想要一個全局的,他只想傳遞一個參數給它的函數(否則'函數'就沒用了)。 –

+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