2011-03-26 26 views
0

首先,我是一個最好的新手PHP程序員。基本上,我有一個開關功能,我在兩個不同的地方使用。每一個切換一個不同的變量,但是交換機內的所有情況對於兩個實例都是相同的。所以我試圖創建一個運行開關的函數,並在我調用該函數之前設置該變量,以便引入正確的變量。但我沒有輸出。例如:PHP開關內部用戶函數輸出什麼都沒有

function testfunc() { 
    switch ($currentplace) { 
    case 1: 
    echo $thumb1; 
    break; 

    case 2: 
    echo $thumb2; 
    break; 

    case 3: 
    echo $thumb3; 
    break; 

    case 4: 
    echo $thumb4; 
    break; 
    } 
} 

然後,後來我把這樣的功能:

//SET CASE FOR THUMB1 
$currentplace = $place1; 
testfunc(); 

再後來,其他的地方,但對於第二個變量

//SET CASE FOR THUMB2 
$currentplace = $place2; 
testfunc(); 

>

?有人告訴我我做錯了什麼?

回答

0

我想,它不匹配任何案例標籤。保留default聲明並嘗試回顯$currentplace的值。

function testfunc() 
{ 
    switch ($currentplace) 
    { 
     // ..... 

     default: echo $currentplace ; 
       break ; 
    } 
} 
+0

就解決問題而言,這是個好主意,但我知道它應該與案例標籤相匹配,因爲如果我將開關置於每個位置並只設置開關= $ place1或$ place2,就會輸出。只有一次,我把它放在testfunc()裏面,沒有任何反應。 – watermelonkid 2011-03-26 18:08:04

2

更改您的代碼,如:

function testfunc($currentplace) { 
... 
} 

testfunc($currentplace); 

// or testfunc($place1); 

那你是怎麼能一個變量傳遞給一個函數,它可以使用它。請注意,名稱不必匹配(請參閱註釋行)。

您的函數不能訪問全局變量,除非您將它們標記爲這樣。但在這種情況下,沒有必要。 (實際上,你從不需要使用全局變量)

+0

謝謝 - 問題在於,本質上我沒有將$ currentplace傳遞給函數,也不知道如何處理每個拇指變量,就像達蒙指出的那樣。謝謝大家 - 非常快! – watermelonkid 2011-03-26 18:22:26

0

echo $thumb1;將回顯一個變量,該變量在函數的作用域中不存在。我認爲這是一個全局變量,在這種情況下,您必須首先通過global $thumb1;來聲明它(對於其他「拇指」也是如此)。

$currentplace也需要來自某處,你可能忘了將它作爲函數參數傳遞?

1

您需要將您的變量傳遞給您的函數。

對於爲例:

function testfunc($currentplace) { 
    // your code here 
} 


testfunc($place1); 

testfunc($place2); 

至於$currentplace$thumb沒有定義是你的函數。

你可以找到更多關於variables scope in the manual的信息。

0

您必須將global $currentplace;放入testfunc()。 但是,難道你不能只用數組而不是$thumb

0

看起來像要從函數訪問全局變量。

最好將變量作爲參數傳遞給函數。

1

您正在使用的這部分程序:

$currentplace = $place1; 
testfunc(); 

,然後,你testfunc()功能如下:

function testfunc() { 
    switch ($currentplace) { 
    // ... 

但* $currentplace變量,函數外聲明,在函數內部不可見:函數引入它們自己的變量作用域。


你有兩種可能的解決方案:

  • 無論是在功能的開始,導入您的變量,使用global關鍵字(這是不太好的解決辦法 - 因爲它使功能取決於外部變量。)
  • 或者,更好的方法是將您的變量作爲參數傳遞給該函數。


使用第一,,想法,你的函數將被定義是這樣的:

function testfunc() { 
    global $currentplace; // Make the outside variable visible from inside the function 
    switch ($currentplace) { 
    // ... 

有關更多信息,請查看本手冊的Variable scope部分。


,並使用第二,好得多,解決方案,將它定義這樣的:

function testfunc($currentplace) { 
    switch ($currentplace) { 

而且這樣調用:

testfunc($place1); 
testfunc($place2); 

而對於更多的信息這個,看看PHP手冊的Function arguments部分。

0

這是一個scope的問題。 $currentplace,您設置爲$place1/2testfunc內不可見。 testfunc中的$currentplace是恰好具有相同名稱的不同變量。 (如果我們不得不擔心別人可能在外面使用什麼名字,否則編寫代碼將非常困難。)

最簡單的解決方案是將外部(全局)$currentplace轉換爲testfunc的範圍,在PHP的情況下使用global聲明,但這被認爲是不好的做法(因爲我們不希望函數不必要地修改外部變量)。最普遍的做法是通過$currentplace作爲參數,我相信很多其他答案已經顯示如何去做。

雖然我們在這樣做,但函數不會對它們將如何使用做出任何假設也是一個好習慣。我指的是你的echo報表,打印到標準輸出。如果您稍後決定在輸出字符串變量之前收集輸出,則必須修改testfunc。但是,如果testfunc只是return編輯了字符串,那麼根據您的不同需求可以簡單地說出echo testfunc($currentplace);$place = testfunc($currentplace);

相關問題