将数据传递给函数

时间:2011-05-16 23:13:15

标签: php arrays function global-variables

好吧所以我知道这是超级基础的,我应该知道如何做到这一点,但我是空白而无法在谷歌找到答案。我有一个包含变量数组的例如

 $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而不确定如何。

1 个答案:

答案 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整个项目,并确保每一个小变化都没有弄乱整个应用程序。当您将变量保留在本地范围内时,您确切知道要更改的内容。