2011-10-07 124 views
-1

我只是想編寫一個可以切換背景顏色的函數。PHP函數不起作用

每次運行時,它應該返回的其他顏色,但它不工作

function bgcolour_switch(){ 
    if(!isset($p)){ 
     global $p; 
     $p = "#C0C0C0"; 
     return $p; 
    }else{ 
     if($p == "#C0C0C0"){ 
      $p = "#FFFFFF"; 
      return $p; 
     }elseif($p == "#FFFFFF"){ 
      $p = "#C0C0C0"; 
      return $p; 
     } 
    } 
} 

我不斷收到相同的顏色恢復(#C0C0C0)

+0

難道這是每個頁面或數次一次?如果每頁只有一次,那麼您需要將先前的背景顏色存儲在會話或cookie中,因爲HTTP是無狀態的。另外,$ p永遠不會被設置爲isset測試。 – GordonM

回答

6

好,$p從未初始設置你的函數的範圍,所以if語句總是評估爲true。

嘗試將global $p;行移至if語句之前的函數的開頭。

+0

謝謝!標記爲答案。 – jdborg

2

$ p是一個局部變量。它的範圍是功能本身。每次您調用此函數時,它都會重置,因此第一行中的isset($p)永遠不會計爲true。

如果$p是全局變量,請在函數的開頭添加下一行(在if上方)。

global $p; 

你可以寫你的代碼也短一點。它甚至可以更短,但這樣它仍然可讀。

function bgcolour_switch(){ 
    global $p; 
    if(!isset($p) || $p === "#FFFFFF") 
    $p = "#C0C0C0"; 
    else 
    $p = "#FFFFFF"; 
    return $p; 
} 
1

呼叫global你之前檢查$p存在。試試這個(未經測試):

<?php 
function bgcolour_switch(){ 
    global $p; 
    if(!isset($p)){ 
     $p = "#C0C0C0"; 
     return $p; 
    }else{ 
     if($p == "#C0C0C0"){ 
      $p = "#FFFFFF"; 
      return $p; 
     }elseif($p == "#FFFFFF"){ 
      $p = "#C0C0C0"; 
      return $p; 
     } 
    } 
} 
-1

具備的功能需要$ P

function fname($p = null){ 
//such and such.. 
}