用户函数内部的PHP切换输出什么

时间:2011-03-26 18:01:32

标签: php switch-statement

首先,我是一名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();

>

有人告诉我我做错了吗?

8 个答案:

答案 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字符串,那么根据您的不同需求来说returnecho testfunc($currentplace);是一件简单的事情。