PHP函数不会保存变量

时间:2011-05-01 19:13:27

标签: php function switch-statement

我创建了这个基本上是switch语句的php函数。对于每种情况,$ team_image变量都保存为不同的值。看起来有点像这样:

function teamImage($team)
{
    switch($team)
    {
        case "Baltimore Orioles":

            $team_image = "orioles";

        case "New York Yankees":

            $team_image = "yankees";

        case "Toronto Blue Jays":

            $team_image = "bluejays";

你明白了。但是,当我调用该函数并尝试在我的代码的其他部分使用$ team_image变量时,它不起作用,因为显然,该变量仍未定义。有什么想法吗?

谢谢,

兰斯

7 个答案:

答案 0 :(得分:3)

由于您只在$team_image函数中设置teamImage,因此只会存在该函数的“scope”。 (一般来说,变量等总是存在于尽可能窄的范围内,这在封装方面是好的。(封装是object orientated programming等的一个关键优势,您可以将其发现为你了解更多。)

因此,您应该从$team_image函数返回teamImage值并将其设置如下:

function teamImage($team) {

    $team_image = NULL;

    switch($team) {
       ...
    }    

    return $team_image;
}

$team_image = teamImage($team);

另一种方法是通过在函数开头添加行$team_imageteamImage函数中的global $team_image;变量定义为全局变量,但这不是好的实践。

此外,您应该在switch语句中break;每个案例代码块,否则您最终只会使用最终案例中指定的值设置$team_image。 (即:如果不破坏每个语句,代码流将继续进入下一个语句。)有关完整详细信息,请参阅switch PHP manual page

答案 1 :(得分:1)

那是因为$ team_image变量的作用域是函数。在函数开头声明$ team_image为全局:

function teamImage($team)
{ 
  global $team_image;
  ...

或更好,在函数末尾返回$ team_image并将其分配给您需要的另一个变量:

function teamImage($team) {
   ...
   return $team_image
}

...

$image = teamImage($team_name);

答案 2 :(得分:1)

很少有事实:

  • 您忘记了break;
  • $team_image具有本地范围
  • 你真的不想使用default吗?

<强>答案:

您必须在功能中使用return,如果您尚未使用,则,否则问题可能出在$team_image scope

示例:

事情发生了变化:

代码:

function teamImage($team)
{
    $team_image = '';
    switch($team)
    {
        case "Baltimore Orioles":    
            $team_image = "orioles";
        break;

        case "New York Yankees":    
            $team_image = "yankees";
        break;

        case "Toronto Blue Jays":    
            $team_image = "bluejays";
        break;
    }
    return $team_image;
 }

<强>用法:

$team = 'new York Yankees';
$teamImage = teamImage($team); // yankees

答案 3 :(得分:0)

您需要查看变量范围文档.. variables scope

答案 4 :(得分:0)

此问题是变量范围之一。 PHP函数有自己的符号表,当你在函数中赋值变量$team_image时,你实际上是在分配一个局部变量。该变量在函数末尾超出范围,意味着它不再存在。

解决此问题的最佳方法可能是返回函数中的值,并使用函数调用分配给$team_image变量。

function teamImage($team)
{
    switch($team)
    {
        case "Baltimore Orioles":

            return "orioles";

        case "New York Yankees":

            return "yankees";

        case "Toronto Blue Jays":

            return "bluejays";
    }
}

$team_image = teamImage($team);

现在,变量$team_image位于您调用函数的范围内。

如果希望变量在所有范围内都可见,则可以使用$GLOBALS['team_image']代替,但全局变量被广泛认为是不好的做法。 (你可以在网上找到很多可以解释原因的来源。)

答案 5 :(得分:0)

However, when I call on the function and try to use the $team_image variable in other parts of my code

您需要在功能结束时返回$team_image

所以它看起来像这样

function getTeamImage($team)
{
 switch($team)
{
 case "a":
    $team_image = "asdas";
    break;
  #end so on
}

return $team_image;
}

#And than you can use in your other code:

$team_image = getTeamImage($team);

答案 6 :(得分:0)

首先,您需要在交换机中使用break来阻止fall-through

http://codepad.org/CVzLAUr0

<?php

function teamImage($team)
{
    switch($team)
    {
        case "Baltimore Orioles":
            $team_image = "orioles";
            break;
        case "New York Yankees":
            $team_image = "yankees";
            break;
        case "Toronto Blue Jays":
            $team_image = "bluejays";
            break;
        default:
            $team_image = "none";
    }
    return $team_image;
}

echo teamImage('Baltimore Orioles');

?>

其次,如果要使用在全局范围内修改的变量,则需要在函数中使用global关键字,或使用$GLOBALS数组:

http://codepad.org/nkT5FxrH

<?php

$team_image = '';

function teamImage($team)
{
    global $team_image;
    switch($team)
    {
        case "Baltimore Orioles":
            $team_image = "orioles";
            break;
        case "New York Yankees":
            $team_image = "yankees";
            break;
        case "Toronto Blue Jays":
            $team_image = "bluejays";
            break;
        default:
            $team_image = "none";
    }
    return $team_image;
}

teamImage('Baltimore Orioles');

echo $team_image;

?>