передача данных в функцию - PullRequest
1 голос
/ 17 мая 2011

Хорошо. Итак, я знаю, что это очень просто, и я должен знать, как это сделать, но у меня не получается найти ответ в Google. У меня есть включение, которое имеет массив переменных, например

 $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 Ответ

2 голосов
/ 17 мая 2011

Метод 1: передать $ phrases, $ 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: Сделать $ phrases, $ tts_phrases глобальными (плохо!)

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 всего проекта и убедитесь, что каждое небольшое изменение не испортило все приложение.Когда вы храните свои переменные в локальной области видимости, вы точно знаете, что вы меняете.

...