Php 将数据传递到函数中

Php 将数据传递到函数中,php,arrays,function,global-variables,Php,Arrays,Function,Global Variables,好吧,我知道这是超基本的,我应该知道如何做到这一点,但我正在空白,并有困难在谷歌找到答案。例如,我有一个包含变量数组的include $phrases["text"][1] = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"; $phrases["mp3"][1] = "http://example.com/file.mp3"; 然后是一个获取变量的函数: function return_ph

好吧,我知道这是超基本的,我应该知道如何做到这一点,但我正在空白,并有困难在谷歌找到答案。例如,我有一个包含变量数组的include

 $phrases["text"][1] = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?";
 $phrases["mp3"][1] = "http://example.com/file.mp3";
然后是一个获取变量的函数:

function return_phrase($phrase_name="", $fallback="",$default ="text"){
    $next= (isset($default) && $default =="mp3") ? 'text' : 'mp3';  
    if(isset($tts_phrases[$default][$phrase_name])){
        return $phrases[$default][$phrase_name]);
    }
    else if(isset($tts_phrases[$next][$phrase_name])){
        return $phrases[$next][$phrase_name]);
    }

    else{
        return $fallback;
    }
}

问题是,
$phrases
数组没有被发送到函数。我可以将文件包含在函数本身中,但我知道这样做是错误的。我想我需要使用$global,只是不知道如何使用

方法1:将$phrases、$tts\u phrases作为参数传递

function return_phrase(array $phrases, array $ttphrases, $phrase_name="", $fallback="",$default ="text"){
    $next= (isset($default) && $default =="mp3") ? 'text' : 'mp3';  
    if(isset($tts_phrases[$default][$phrase_name])){
        return $phrases[$default][$phrase_name]);
    }
    else if(isset($tts_phrases[$next][$phrase_name])){
        return $phrases[$next][$phrase_name]);
    }

    else{
        return $fallback;
    }
}
方法2:使$phrases、$tts\u词组成为全局(坏!)

使用全局变量是一个快速而简单的解决方案,但一旦应用程序变得更大,它们就变得很难跟踪。例如,以我在工作中必须处理的这个遗留代码片段为例:

function foo() {
     global $mysqldsn, $ldapdsn, $autologout_timer, $isMobileDevice, logout_fail_limit, $logout_fail_window, $lang, $project_contact_email, $project_contact_name ... (50 or 60 more global variables following)
     ...
 }

任何时候,当我看到一个页面,它只是把这些变量中的一个从稀薄的空气中拉出来,我必须控制整个项目,并确保每一个小的变化都不会弄乱整个应用程序。当您将变量保持在局部范围内时,您确切地知道您正在更改什么。

只需添加
global$phrases,$tts\u phrases作为函数的第一行。哦,请仔细阅读手册。还有
$tts_短语
,您可能还想解释为什么
全局
不好。实际上
$tts_短语
是唯一的数组。我正试着移除。我有一个问题,我如何调用我尝试返回的函数(短语('1','somefallback'),但得到传递给tts的错误
参数1\u短语()必须是数组
返回短语($tts\u短语,'1','somefallback')
谢谢,刚刚计算出来:)
function foo() {
     global $mysqldsn, $ldapdsn, $autologout_timer, $isMobileDevice, logout_fail_limit, $logout_fail_window, $lang, $project_contact_email, $project_contact_name ... (50 or 60 more global variables following)
     ...
 }