функция — Понимание области видимости в PHP (по сравнению с Javascript)

Я знаю, что объем работает по-разному в PHP и в Javascript.

Когда я впервые начал изучать Javascript (после пары лет изучения PHP), я изначально не осознавал, что переменные, объявленные вне функции, также доступны из внутри функция.

Теперь (после нескольких лет сосредоточения гораздо большего внимания на Javascript) я озадачен тем, как вернуть переменную области действия PHP обратно в среду дополнительных функций.

Пример:

$myArray = array();

function addItemsToMyArray($myArray) {

$myArray[] = 'apple';
$myArray[] = 'banana';
$myArray[] = 'coconut';

return $myArray;
}

addItemsToMyArray($myArray);

echo count($myArray);    /* Gives 0 */

Почему count($myArray) дать 0 вместо 3?

3

Решение

Функция addItemsToMyArray() правильно настроен для возврата массива в основной код PHP, но вы забыли перехватить это возвращаемое значение и поместить его в переменную. Один из способов написания этого кода и облегчения понимания различий может быть таким:

function addItemsToMyArray($tmpArray) {

$tmpArray[] = 'apple';
$tmpArray[] = 'banana';
$tmpArray[] = 'coconut';

return $tmpArray;
}

$myArray = array();
$myArray = addItemsToMyArray($myArray);

echo count($myArray);    /* Gives 3 */

Переменная, используемая внутри функции, является переменной, отличной от $myArray переменная вне функции.

2

Другие решения

Если не указано иное, аргументы функции / метода передаются по значению, то есть вы получаете копия из них внутри функции. Если вы хотите, чтобы функция изменила переданную ей переменную, вам нужно перейти по ссылке. Как описано Вот:

По умолчанию аргументы функции передаются по значению (так что если
Значение аргумента внутри функции изменяется, оно не получает
изменилось за пределами функции). Чтобы позволить функции изменять свои
аргументы, они должны быть переданы по ссылке.

Чтобы аргумент функции всегда передавался по ссылке, добавьте
амперсанд (&) к имени аргумента в определении функции:

Обратите внимание на амперсанд перед $array на странице документа для сортировки функций, таких как asort() а также ksort():

bool asort (массив &$ array [, int $ sort_flags = SORT_REGULAR])

bool ksort (массив &$ array [, int $ sort_flags = SORT_REGULAR])

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector