[PHP] 참조 (reference : &) + 스위프트 비교
필그램
·2017. 2. 6. 08:48
참조는 메모리의 주소값을 같이 사용하는 개념입니다.
보통 참조변수는 &를 앞에 붙입니다.
일반적으로 변수의 값을 사용할때 입니다.
3라인의 변수 $number 값이 $pointer로 넘어갑니다.
<?php
$number = 3;
$pointer = $number; // Sets $pointer to a reference to $number
echo $number."<br/>"; // Outputs '3' and a line break
$pointer = 24; // Sets $number to 24
echo "number is now : $number.<br/>"; // Outputs '24'
echo "pointer is : $pointer";
결과:
3
number is now : 3.
pointer is : 24
위와같이 $pointer 값이 변경되면, 그 값만 변경되고, $number의 값은 변경되지 않습니다.
하지만 3라인의 변수값에 &를 추가하면 $pointer 변수는 $number변수의 주소값을 참조합니다.
이 의미는 $pointer 와 $number는 같은 주소값을 사용한다는 것입니다.
<?php
$number = 3;
$pointer = &$number; // Sets $pointer to a reference to $number
echo $number."<br/>"; // Outputs '3' and a line break
$pointer = 24; // Sets $number to 24
echo "number is now : $number.<br/>"; // Outputs '24'
echo "pointer is : $pointer";
결과는 아래와 같습니다.
3
number is now : 24. //
pointer is : 24
위처럼 $pointer 변수 값이 변하면 $number값도 같이 변합니다.
왜냐하면 메모리의 같은 주소값을 사용하기 때문입니다.
그림의 오른쪽이 메모리 입니다. 그림처럼 두개의 변수가 하나의 주소를 참조하는 것입니다.
[SWIFT 의 경우]
애플 레퍼런스 예제 입니다
// Value type example
struct S { var data: Int = -1 }
var a = S()
var b = a // a is copied to b
a.data = 42 // Changes a, not b
println("\(a.data), \(b.data)") // prints "42, -1"Struct로 일반 값을 사용하는 경우 a, b의값이 달라지지만,
// Reference type example
class C { var data: Int = -1 }
var x = C()
var y = x // x is copied to y
x.data = 42 // changes the instance referred to by x (and y)
println("\(x.data), \(y.data)") // prints "42, 42"Class의 경우 레퍼런스 참조로 동일한 값으로 변경됩니다.
자바는 '::'로 레퍼런스를 표기하는데, 좀 깊이가 있어 여기서 설명은 제외합니다.
'PHP' 카테고리의 다른 글
| [PHP] $_REQUEST, $_POST, $_GET 차이점 (0) | 2017.02.08 |
|---|---|
| [PHP] 사용자 정의 함수(Custom Functions) : 000초 -> 분초로 만드는 프로그램 (0) | 2017.02.06 |
| [PHP] 배열과 정렬(Array and Sorting) 그리고 각 언어별 비교 (0) | 2017.02.06 |
| [PHP] Built in Function : strtolower(), ucfirst() 사용법 (0) | 2017.02.05 |