밖에 어레이가 있습니다.
$myArr = array();
외부 어레이에 대한 기능 액세스를 제공하여 어레이에 가치를 더하고 싶다.
function someFuntion(){
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal; }
함수의 범위를 변수에 올바르게 지정하려면 어떻게 해야 합니까?
질문에 대한 답변
기본적으로 함수 내부에 있으면 외부 변수에 액세스할 수 없습니다.
함수가 외부 변수에 액세스할 수 있도록 하려면 다음과 같이 선언해야 합니다.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 메뉴얼의 「기능」섹션, 특히 다음의 서브섹션을 참조해 주세요.
$foo = 42; $bar = function($x = 0) use ($foo){
return $x + $foo; }; var_dump($bar(10)); // int(52)
업데이트: 화살표 기능을 지원하게 되었습니다만, 화살표 기능을 사용하여 답변을 작성하신 분에게 알려드리겠습니다.
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);
그럼 글로벌에 의존하지 않아도 되겠네요
$myArr = array();
function someFuntion(array $myArr) {
$myVal = //some processing here to determine value of $myVal
$myArr[] = $myVal;
return $myArr; }
$myArr = someFunction($myArr);
목표를 달성하기 위한 유일한 방법은 글로벌 변수를 사용하는 것입니다.
이를 실현하기 위해서는global $myArr;
기능을 시작할 때까지 기다립니다.그러나 글로벌 변수를 사용하는 것은 대부분의 경우 잘못된 생각이며 피할 수 있습니다.
보다 나은 방법은 어레이를 기능에 대한 인수로서 전달하는 것입니다.
function someFuntion($arr){
$myVal = //some processing here to determine value of $myVal
$arr[] = $myVal;
return $arr; }
$myArr = someFunction($myArr);