我创建了这个基本上是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变量时,它不起作用,因为显然,该变量仍未定义。有什么想法吗?
谢谢,
兰斯
答案 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_image
将teamImage
函数中的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。
示例:强>
事情发生了变化:
$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:
<?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
数组:
<?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;
?>