Предоставление моего функционального доступа к внешней переменной

У меня есть массив снаружи:

$myArr = array();

Я хотел бы предоставить свой функциональный доступ к массиву снаружи, таким образом, он может добавить значения к нему

function someFuntion(){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Как я даю функции обзор права переменной?

69
задан brett 27 March 2010 в 22:48
поделиться

4 ответа

По умолчанию, когда вы находитесь внутри функции, у вас нет доступа к внешним переменным.


Если вы хотите, чтобы ваша функция имела доступ к внешней переменной, вы должны объявить ее как global внутри функции:

function someFuntion(){
    global $myArr;
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Для получения дополнительной информации см. Область видимости переменной .

Но обратите внимание, что использование глобальных переменных не является хорошей практикой : с этим ваша функция больше не является независимой.


Лучше было бы заставить вашу функцию возвращать результат :

function someFuntion(){
    $myArr = array();       // At first, you have an empty array
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
    return $myArr;
}

И вызывать функцию следующим образом:

$result = someFunction();


Ваша функция также может принимать параметры и даже работать с параметр, переданный по ссылке :

function someFuntion(array & $myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;      // Put that $myVal into the array
}

Затем вызовите функцию следующим образом:

$myArr = array( ... );
someFunction($myArr);  // The function will receive $myArr, and modify it

С помощью этого:

  • Ваша функция получила внешний массив в качестве параметра
  • И может изменить его, поскольку он передается по ссылке .
  • И это лучше, чем использование глобальной переменной: ваша функция - это единица измерения, не зависящая от какого-либо внешнего кода.


Для получения дополнительной информации об этом, вы должны прочитать раздел Функции руководства по PHP и, особенно, следующие подразделы:

119
ответ дан 24 November 2019 в 13:43
поделиться
Global $myArr;
$myArr = array();

function someFuntion(){
    global $myArr;

    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
}

Предупреждаем, обычно люди сторонятся глобальных переменных, поскольку у них есть свои недостатки.

Вы можете попробовать это

function someFuntion($myArr){
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;
    return $myArr;
}
$myArr = someFunction($myArr);

Это позволит вам не полагаться на Globals.

10
ответ дан 24 November 2019 в 13:43
поделиться
$myArr = array();

function someFuntion(array $myArr) {
    $myVal = //some processing here to determine value of $myVal
    $myArr[] = $myVal;

    return $myArr;
}

$myArr = someFunction($myArr);
8
ответ дан 24 November 2019 в 13:43
поделиться

То, что, вероятно, не так Хороший способ достижения цели - использование глобальных переменных.

Вы можете добиться этого, добавив global $ myArr; в начало вашей функции. Однако обратите внимание, что использование глобальных переменных в большинстве случаев является плохой идеей, и ее, вероятно, можно избежать.

Гораздо лучше было бы передать массив в качестве аргумента функции:

function someFuntion($arr){
    $myVal = //some processing here to determine value of $myVal
    $arr[] = $myVal;
    return $arr;
}

$myArr = someFunction($myArr);
3
ответ дан 24 November 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: