외부 변수에 대한 내 함수 액세스 허용

밖에 어레이가 있습니다.

$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);