首先,我是一名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 :(得分:2)
更改您的代码,如:
function testfunc($currentplace) {
...
}
testfunc($currentplace);
// or testfunc($place1);
这就是你可以将变量传递给函数以便它可以使用它的方法。请注意,名称不必匹配(请参阅注释行)。
除非您将其标记为此函数,否则您的函数无法访问全局变量。但在这种情况下,没有必要。 (事实上,你真的不需要像这样使用全局变量。)
答案 1 :(得分:1)
您需要将变量传递给您的函数。
例如:
function testfunc($currentplace) {
// your code here
}
testfunc($place1);
testfunc($place2);
至于$currentplace
,您的$thumb
未定义是您的功能。
您可以找到有关variables scope in the manual的更多信息。
答案 2 :(得分: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部分。
答案 3 :(得分:0)
我猜,它与任何案例标签都不匹配。保留default
语句并尝试回显$currentplace
。
function testfunc()
{
switch ($currentplace)
{
// .....
default: echo $currentplace ;
break ;
}
}
答案 4 :(得分:0)
echo $thumb1;
将回显函数范围中不存在的变量。我假设这是一个全局变量,在这种情况下你必须首先通过global $thumb1;
声明它(对于其他“拇指”声明也是如此)。
$currentplace
也需要来自某个地方,您可能忘记将其作为函数参数传递?
答案 5 :(得分:0)
您必须将global $currentplace;
放入testfunc()
。
但是,你不能只使用数组而不是$thumb
s?
答案 6 :(得分:0)
看起来您想从函数中访问全局变量。
最好将变量作为参数传递给函数。
答案 7 :(得分:0)
这是scope的问题。您设置为$currentplace
的{{1}}在$place1/2
内不可见。 testfunc
内的$currentplace
是一个不同的变量,恰好具有相同的名称。 (如果我们不得不担心其他人可能在外面使用过什么名字,那么编写代码就很难了。)
最简单的解决方案是将外部(全局)testfunc
放入$currentplace
的范围,在PHP的情况下使用testfunc
声明,但这被认为是不好的做法(因为我们不希望函数不必要地修改外部变量)。最常见的做法是将global
作为参数传递,我相信其他许多答案已经证明了如何做。
虽然我们正在努力,但对于不对其如何使用进行任何假设的函数来说,这也是一种很好的做法。我指的是你的$currentplace
语句,它们打印到标准输出。如果您稍后决定在输出之前在字符串变量中收集输出,则必须修改echo
。但是,如果testfunc
只是testfunc
字符串,那么根据您的不同需求来说return
或echo testfunc($currentplace);
是一件简单的事情。