Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

참조에 의한 PHP 전달

<시간/>

소개

PHP에서 함수에 대한 인수는 값으로 전달되거나 참조로 전달할 수 있습니다. 기본적으로 실제 인수의 값은 함수 내에서 지역 변수가 되는 형식 인수에 값으로 전달됩니다. 따라서 이러한 변수를 수정해도 실제 인수 변수의 값은 변경되지 않습니다.

인수를 참조로 전달할 때 전자는 후자를 참조하기 때문에 형식 인수의 값 변경은 실제 인수 변수에 반영됩니다. 따라서 참조 메커니즘에 의한 전달은 전역 공간에서 데이터를 간접적으로 조작하는 데 도움이 됩니다. 또한 함수가 하나의 변수만 반환할 수 있다는 사실을 극복하는 데 도움이 됩니다.

값으로 전달

다음 예에서는 두 개의 변수가 swap() 함수에 전달됩니다. 교환 메커니즘이 함수 내부에서 발생하더라도 전달된 변수의 값을 변경하지 않습니다.

예시

<?php
function swap($arg1, $arg2){
   echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n";
   $temp=$arg1;
   $arg1=$arg2;
   $arg2=$temp;
   echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n";
}
$arg1=10;
$arg2=20;
echo "before calling function : arg1=$arg1 arg2=$arg2\n";
swap($arg1, $arg2);
echo "after calling function : arg1=$arg1 arg2=$arg2\n";
?>

출력

이 예는 다음과 같은 출력을 제공합니다.

before calling function : arg1=10 arg2=20
inside function before swapping: arg1=10 arg2=20
inside function after swapping: arg1=20 arg2=10
after calling function : arg1=10 arg2=20

참조로 전달

참조로 인수를 받으려면 형식 인수를 사용하는 변수 앞에 &기호를 붙여야 합니다. 함수 호출에 사용되는 변수를 참조합니다. 따라서 함수 내부를 스와핑한 결과는 전달된 원래 변수에도 반영됩니다.

예시

<?php
function swap(&$arg1, &$arg2){
   echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n";
   $temp=$arg1;
   $arg1=$arg2;
   $arg2=$temp;
   echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n";
}
$arg1=10;
$arg2=20;
echo "before calling function : arg1=$arg1 arg2=$arg2\n";
swap($arg1, $arg2);
echo "after calling function : arg1=$arg1 arg2=$arg2\n";
?>

출력

교환 결과는 다음과 같이 표시됩니다.

before calling function : arg1=10 arg2=20
inside function before swapping: arg1=10 arg2=20
inside function after swapping: arg1=20 arg2=10
after calling function : arg1=20 arg2=10

다음 예에서 배열 요소는 배열 초기화 전에 선언된 개별 변수에 대한 참조입니다. 요소가 수정되면 변수의 값도 변경됩니다.

예시

<?php
$a = 10;
$b = 20;
$c=30;
$arr = array(&$a, &$b, &$c);
for ($i=0; $i<3; $i++)
$arr[$i]++;
echo "$a $b $c";
?>

출력

$a, $b 및 $c의 값도 증가합니다.

11 21 31

배열을 참조로 함수에 전달할 수도 있습니다.

예시

<?php
function arrfunction(&$arr){
   for ($i=0;$i<5;$i++)
      $arr[$i]=$arr[$i]+10;
}
$arr=[1,2,3,4,5];
arrfunction($arr);
foreach ($arr as $i)
echo $i . " ";
?>

출력

수정된 배열은 다음과 같이 표시됩니다.

11 12 13 14 15

객체 및 참조

PHP에서 객체는 기본적으로 참조로 전달됩니다. 객체의 참조가 생성되면 해당 참조는 첫 번째 객체에 대한 참조이기도 한 $this 형식의 인수로 전송됩니다.

예시

<?php
class test1{
   private $name;
   function getname(){
      return $this->name;
   }
   function setname($name){
      $this->name=$name;
   }
}
$obj1=new test1();
$obj2=&$obj1;
$obj1->setname("Amar");
echo "name: " .$obj2->getname();
?>

출력

위의 코드는 다음 출력을 표시합니다.

name: Amar