Использование «use» в версии PHP <5.3

#php

#php

Вопрос:

Я работаю над веб-приложением на основе PHP. Версия запущенного PHP — 5.2.x! У меня есть функция play в программе, а также вызываемый массив $study , определенный снаружи play , содержащий несколько элементов.

 function play( $games, $time ) {
//Do something here 
$lol = array_search(strtolower($games), array_map('strtolower', $study['somevar']));
}
  

Теперь дело в том, что я вызываю play() в другом месте своего кода, но, как вы можете видеть, я ссылаюсь $study['somevar'] , но функция принимает только два аргумента: $games amp; $time поэтому нет способа ссылаться на $study[‘somevar’] . Я знаю, что иногда в PHP это тоже работает

 function play($games, $time) use ($study){
  //do something
}
  

Но когда я пытаюсь запустить этот use синтаксис в PHP 5.2, он выдает ошибку. Итак, как я могу это сделать? Есть идеи?

Редактировать 1:

Итак, это то, что выводит массив $study (который я пробовал вне функции)

 echo $study['somevar'] : It prints out Array (English word "Array")
echo $study['somevar'][0] : It prints out blahblah (0th element)
echo $study['somevar'][1] : It prints out OKoK (1st element)
  

Проще говоря, используя var_dump ($study), я получил

 ["somevar"]=>
  array(2) {
    [0]=>
    string(8) "blahblah"
    [1]=>
    string(4) "OKoK"
  

В study -> somevar нет 2-го элемента .. Итак, только два (0-й и 1-й)

Теперь, в основном, я хочу использовать этот массив для поиска в нем с помощью $games внутри функции play . Итак, для этого внутри функции; как вы можете видеть выше в псевдокоде, который я использовал

array_search(strtolower($games), a second element)

Теперь этот второй элемент внутри array_search, я хочу, чтобы все элементы массива $study (т.е. blahblah, OKoK) были преобразованы в нижний регистр, чтобы я мог легко сопоставлять с помощью array_search метода. Следовательно, я использовал логику для array_map('strtolower', $study['somevar']) ..

и поместил его в array_search метод, подобный :

$lol = array_search(strtolower($games), array_map('strtolower', $study['somevar']));

Теперь, в дальнейшем коде, я передаю некоторые значения в функции play('OkOk', 10); , и в этом OKOK должен соответствовать нашему жестко запрограммированному массиву $study, поскольку элемент 1 содержит этот ключ. Это логика. Но я получаю ошибку типа

 array_map() Argument #2 should be an array in ..........
array_search() [<a href='function.array-search'>function.array-search</a>]: Wrong datatype for second argument in .........
  

Комментарии:

1. Все еще ошибка @RyanVincent array_map(): Argument #2 should be an array in <somepath> amp; array_search(): Wrong datatype for second argument in <somepath>

2. @RyanVincent При печати study[‘somevar’] [0] вне функции он хорошо выдает результат.

3. @RyanVincent Брат, я обновил вопрос с помощью полных шагов. Пожалуйста, посмотрите еще раз

4. «Версия запущенного PHP — 5.2.x!» — найдите лучший веб-хост, например, сейчас . Срок службы PHP 5.2 истек более пяти лет назад.

5. Нет оправдания для запуска 5.2 в 2016 году. Он мертв уже почти 6 лет php.net/eol.php . Единственный реальный ответ на ваш вопрос: обновите версию r php до 7.0. Или, по крайней мере, последняя версия 5.6. Если ваш хост не сотрудничает, вместо этого перейдите к нормальному или получите дешевый vps.

Ответ №1:

Вы не можете использовать use в PHP 5.2, потому что он был введен в PHP 5.3, но вы можете использовать global :

 function play( $games, $time ) {
    global $study;
    //Do something here 
    $lol = array_search(strtolower($games), array_map('strtolower', $study['somevar']));
}
  

Комментарии:

1. Не работает.. Я обновил вопрос с дополнительным подробным обзором