PHP中的全局变量

Chi*_*ico 3 php

我正在写一个脚本,它会多次从输入文件中的单词中选择一个随机单词.现在调用file()多次似乎效率低下,所以我想要为文件中的单词设置一个全局数组,并将一个函数加载到数组中(在选择随机单词之前调用).为什么不起作用?

global $words;

function init_words($file)
{
    $words = file($file);
    $count = count($words);
    echo "$count words<br>\n"; // "3 words"
}

init_words("/foo/bar");
$count = count($words);
echo "$count words<br>\n"; // "0 words" 
Run Code Online (Sandbox Code Playgroud)

Tre*_*non 5

您需要$words在函数本身内声明全局.看到:

$words = '';

function init_words($file)
{
    global $words;
    $words = file($file);
    $count = count($words);
    echo "$count words<br>\n"; // "3 words"
}
Run Code Online (Sandbox Code Playgroud)

我建议你查看PHP手册中的变量范围章节.

另外,我绝不会以这种方式编写这段代码.除非绝对必要,否则避免使用全局变量.

我会以这种方式编写代码以避免此问题:

function init_words($file)
{
    $words = file($file);
    $count = count($words);
    echo "$count words<br>\n"; // "3 words"
    return $words;
}

$words = init_words("/foo/bar");
$count = count($words);
echo "$count words<br>\n"; // "3 words" 
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅PHP手册中的返回值章节.