PHP和消失变量的故事

时间:2011-08-20 05:27:18

标签: php

曾几何时,在遥远的一片土地上,有一个叫做“$languages”的小镇。在这个小镇生活着许多小小的“$language” - 一些大的,一些小的,一些吃饱的,一些瘦的......正是这种“$language”的多样性让这个小镇变得如此大。

每年一次,小“$language”将一个接一个地寄往一个奇怪而奇妙的地方。在这个陌生的地方,每种语言都变得同样微不足道,一种奇怪的东西 - 有些人称它为“$qfactor”(但没有人知道为什么)从它们中出来。对于一些人来说,它完全没有了,他们就变成了一个。有时候,它的格式不正确 - 在这种情况下,“$language”会立即送回家。

然后,每一个最后的小“$language”都将穿过一个神奇的门户(称为The Great if)。这个网关让那些通过它的“$language”感到惊愕,因为它会决定它们是否是“$accepted”之一。这些“$accepted”会神奇地被带到一个没有人知道的地方,没有人敢(或可能?)说出来 - 因为,奇怪的是,第二天,每一个人都在$language ,“会被发现回到他家。

然后,有一天,if被打破了,每一个“$language”都会被粗暴地吐出来,因为外国的声音被宣布:Notice: Undefined variable: langauge in /var/www/nginx-default/path/to/lib/http/languages.php

TL:DR

foreach ($raw_languages as $language_value) {
    $language = '';

    $language_values = explode(';', $language_value);

    // If the qfactor was not supplied
    if (count($language_values) == 1) {
        // Lower-case the language
        $language = strtolower($language_values[0]);
        // Default to a q-factor of one
        $qfactor = 1;
    // If the qfactor was supplied
    } else {
        $language = strtolower($language_values[0]);
        $qfactor = $language_values[1];

        // Validate the q-factor
        if (!is_numeric($qfactor)) {
            // If it's not numeric (invalid) skip it
            continue;
        }
    }

    // If this isn't one of the accepted languages, skip it.
    if (!in_array($langauge, $accepted)) {
        continue;
    }

    // Add it to the languages array
    $languages[$language] = $qfactor;
}

出于某种原因,在if (!in_array($language, $accepted)后,我收到错误消息:`Notice: Undefined variable: langauge in /var/www/nginx-default/path/to/lib/http/languages.php。奇怪的是,我甚至可以在同一行上调用print()(通过将其置于if语句中)并且我不会得到相同的错误 - 事实上,这样做会给出预期的产出!

我非常困惑为什么会发生这种情况(而且因为它的阻碍工作而感到无聊,正如你可以从故事中看到的那样),所以任何帮助都会受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:5)

你拼写错误language

if (!in_array($langauge, $accepted)) {
        continue;
}

交换a中的u$langauge:)

答案 1 :(得分:1)

Notice: Undefined variable: langauge in /var/www/nginx-default/path/to/lib/http/languages.php

如果您复制粘贴的错误文本,那么拼写错误的变量名称。