我的PHP函数不起作用

时间:2009-10-12 16:24:27

标签: php user-defined-functions

我遇到以下代码时遇到问题。它应该做的是回显cats.php,然后是example.php,但它并没有回应example.php。有什么想法可能会发生这种情况吗?

$bookLocations = array(
    'example.php',
    'cats.php',
    'dogs.php',
    'fires.php',
    'monkeys.php',
    'birds.php',
);

echo $bookLocations[1];

function findfile($filenumber)
{
echo $bookLocations["$filenumber"];
}

findfile(0);

6 个答案:

答案 0 :(得分:6)

尝试更改,

echo $bookLocations["$filenumber"];

为:

echo $bookLocations[$filenumber];

编辑*要扩展Thomas的正确答案,而不是使用全局变量,您可以将方法更改为:

function findfile($filenumber, $bookLocations)
{
    echo $bookLocations[$filenumber];
}

答案 1 :(得分:5)

我相信您可能还需要在函数中声明全局变量。

global $bookLocations;

答案 2 :(得分:3)

好的,有两个问题。

可变范围

你的函数不知道数组$bookLocations,你需要将它传递给你的函数:

function findfile($filenumber, $bookLocations)

数组键

您不希望将数组键包装在引号中:

wrong: $bookLocations["$filenumber"];
right: $bookLocations[$filenumber];

答案 3 :(得分:1)

"$filenumber"中的引号将您的键变为字符串,此时数组的键都是数字。您实际上在想要访问$bookLocations["1"]时尝试访问$bookLocations[1] - 也就是说,1 "1"相同。因此,和其他人一样,你需要摆脱键周围的引号(并检查你的变量范围)。

答案 4 :(得分:1)

function findfile($filenumber)
{
  global $bookLocations;
  echo $bookLocations[$filenumber];
}

优秀的开发人员通常会避免使用全局变量。而是将数组作为参数传递给函数:

function findfile($files, $filenum)
{
  echo $files[$filenum];
}

答案 5 :(得分:0)

$ bookLocations超出了您的功能范围。如果你回显$ filenumber,你会看到它在范围内,因为你按值传递了它。但是,没有参考$ bookoLocations。

你应该传入$ bookLocations

声明:function findfile($ filenumber,$ bookLocations){ call:findfile(1,$ bookLocations);

您也可以将$ bookLocations声明为全局,但如果可能,应避免使用全局变量。