2011-10-07 121 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.. 
}