好吧所以我知道这是超级基础的,我应该知道如何做到这一点,但我是空白而无法在谷歌找到答案。我有一个包含变量数组的例如
$phrases["text"][1] = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?";
$phrases["mp3"][1] = "http://example.com/file.mp3";
然后是一个获取varibles的函数:
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而不确定如何。
答案 0 :(得分:2)
方法1:将$ phrase,$ tts_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:制作$ phrase,$ tts_phrases global(bad!)
function return_phrase($phrase_name="", $fallback="",$default ="text"){
global $phrases, $tts_phrases;
$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;
}
}
使用全局变量是一种快速简便的修复方法,但是一旦您的应用程序变大,就很难跟踪它们。例如,采用我在工作中必须处理的遗留代码片段:
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)
...
}
每当我看到其中一个页面只是凭空捏动其中一个变量时,我必须按Ctrl + F整个项目,并确保每一个小变化都没有弄乱整个应用程序。当您将变量保留在本地范围内时,您确切知道要更改的内容。