在switch构造中调用和声明的函数会产生错误

时间:2011-09-04 15:45:48

标签: php

我是PHP的新手。好吧,我所指的文字说引用
可以在程序中的任何位置定义函数。

上述语句适用于代码块1但不适用于代码块2. KINDLY EXPLAIN?

代码块1:

<?php
test();
function test()
{
    echo "Hello Inside the function";
}
?>

代码块2:

<?php
$no=1;
switch ($no)
{
case "1":
    test();
function test()
    {
    echo "Hello test";
        }
 }
?>

4 个答案:

答案 0 :(得分:5)

理论上,是的,功能可以“随处”定义。在实践中,有一个技巧。诀窍如下:当PHP读取并编译脚本源时,它会查找函数定义,如果函数定义在全局上下文中(不在if,switch等内),它将立即定义。但是,如果它在这样的构造内部,或者在另一个函数内部等,它将仅在控制传递function()语句所在的行时定义。

因此,代码块1起作用 - 因为该函数在全局上下文中,因此PHP将在运行任何代码之前定义它。但是在代码块2中,函数位于switch的上下文中,因此只有当控件通过第7行时才会定义它。但是由于你试图在第6行调用它,它还没有被定义!所以PHP出错了。

这里的建议永远不会在条件等中定义你的函数,除非你的意思是条件定义 - 然后注意不要在它们被定义之前调用它们。

答案 1 :(得分:2)

你可以在switch语句中声明函数,但它不是那么好。你有错误,因为你调用函数然后声明它。首先你应该声明函数然后使用它。

<?php
$no=1;
switch ($no)
{
    case "1":
        function test()
        {
            echo "Hello test";
        }
        test();
 }
?>

答案 2 :(得分:1)

您无法在switch语句中声明函数。

但是你可以做的是:

<?php
$no=1;
switch ($no)
{
    case "1":
        test();
        break;
}

function test()
{
    echo "Hello test";
}
?>

只需从switch删除该功能。

该函数仅在被调用时执行,因此无关紧要。

修改

该引用(Functions can be defined anywhere within your program.)的合理含义是:

您可以在脚本中调用函数之前或之后声明函数。

答案 3 :(得分:0)

有几个问题。你需要使用

 case 1:

用于开关,否则它将查找等效于“1”的字符串。 “1”!= 1(第一个是字符串,第二个是整数)

虽然你的文字确实说任何地方都可以定义功能,但实际上它们并不代表任何地方。您无法在代码块内定义函数,因此您必须在交换机外定义函数:

<?php
$no = 1;
switch ($no) {
    case 1:
        test();
        break;
}

function test()
{
    echo "I'm inside the test function!";
}

?>

否则事情就会变得疯狂。