728x90
변수

변수는 말그대로 "변하는 수" 입니다.
예를들어 철이가 1000원을 가지고 구멍가게에 가서 껌을 한통사고 500원이 남았습니다. 이때 철이가 가지고 있는 돈이 1000원에서 500원으로 바뀌었습니다. 여기서 "철이가 가지고 있는 돈" 이라는 것이 변수가 되는 것입니다. 처음에는 1000원이라는 값을 갖고 있었는데 껌을 사고난 직후 500원이란 값으로 변하였습니다.


프로그래밍에서 변수란 프로그램 내에서 어떤 값을 임시로 저장하기위해 메모리 공간에 이름을 붙여놓은 것입니다.

PHP에서는 변수를 $name 과 같은 모양으로 표시하고 $name은 name 이라는 이름의 변수임을 뜻합니다.

Type (변수형)

진리값 , 정수 , 실수 , 문자열 , 배열 , 객체 , 리소스 , 널 총 8가지의 변수형이 있습니다.

변수면 값만 저장하면 됐지 왜 변수형이란게 필요한지 언뜻 이해가 안가실겁니다. 이유는 한정된 메모리때문인데요. 모든값을 다 넣을 수 있게 하려고 변수 한 개마다 메모리 1메가바이트씩 준다고 하면, 변수 100개만 만들어쓰면 메모리를 100메가바이트나 사용하게 됩니다. 단지 숫자 몇자리를 저장하려고 한다면 1메가바이트 공간이 필요할리가 없잖아요. 메모리를 보다 효율적으로 사용하기 위해서 변수를 여러 가지 종류로 나뉘게 된 것입니다.

진리값 (boolean)

boolean 형은 진리값, 즉 참(TRUE)과 거짓(FALSE) 두가지 값만을 가지기 위한 변수형입니다. 메모리를 아주많이 절약할 수 있겠네요. 1bit 만 필요하니까요.

bit? Byte?
bit는 컴퓨터에서 가장 작은 단위로 0과 1, 두 가지를 저장할 수 있는 크기의 용량을 말합니다.
(여기서 0과 1 두 개 모두를 저장하는 것이 아니라 둘 중 하나의 값을 저장할 수 있는 것을 말합니다.)

8bit = 1Byte 이므로 1Byte는 2의 8승 가지, 즉 256가지를 표현할 수 있는 크기가 됩니다.
(이 1Byte 크기로 알파벳을 비롯하여 0~9까지 숫자와 특수기호들을 표현하게 됩니다. )

보통의 경우 숫자는 메모리를 4Byte 차지하게 되는데, 4Byte는 2의 32승 가지를 표현할 수 있으므로
정수를 사용한다면 0~4294967295 또는 -2147483648~2147483647 사이의 숫자를 저장할 수 있게됩니다.

참고.
PHP에서 0은 거짓(FALSE)을 0외의 모든 값은 참(TRUE)을 나타냅니다.


정수 ( Integer )

$a = 1234; # 십진수
$a = -123; # 음수
$a = 0123; # 8진수 ( 십진수의 83과 같습니다. )
$a = 0x12; # 16 진수 ( 십진수의 18과 같다 )

십진수와 음수는 다들 아시겠지만 8진수와 16진수는 표현법이 새롭습니다. 8진수는 0으로 시작하고 0~7까지의 숫자만을 사용하여 표현하며, 16진수는 0x로 시작하고 0~9와 A~F까지의 총 16가지의 문자로 표현합니다. 프로그래밍을 하기 위해서는 2진수와 8진수 그리고 16진수와 친해져야 합니다.

참고.
PHP는 정수를 표시하기 위해서 4Byte의 메모리 공간을 부여합니다. 위에서도 언급하였듯이 4Byte공간은 총 232 가지의 표현이 가능합니다. 정수는 부호가 없이 0 이상의 값을 표현할 때는 0~4294967295 사이의 수를 부호가 있는 정수 값을 표현할 때는 -2147483648~2147483647 사이의 수를 가질 수 있습니다. 총 32개의 bit 중에서 첫 번째 bit를 부호bit으로 사용하여 0일 때 양수 1일 때 음수로 표현하기 때문에 실제 숫자는 31개의 bit으로 표현하게 되어 위와 같은 범위를 갖게됩니다.

실수 ( float & doubles )

$a = 1.234;
$a = 1.2e3;

두 번째에서 e3 은 10의 3승인 1000이 곱해진다는 뜻입니다. 즉, 1200 이란 값이 됩니다.

참고.
실수를 표시하기 위해서는 소수점이 필요합니다. 소수점 윗자리와 아랫자리 모두를 표현해야 하기 때문에 8Byte의 메모리를 사용합니다.


문자열 ( String )

문자열을 표시하는 방법에는 아래와 같은 세가지가 있습니다. 큰 따옴표(") , 작은따옴표('), 상속 문법을 이용한 방법

1. 큰 따옴표

"나는 문자열이다." 와 같이 큰 따옴표 사이에 문자열을 써넣으면 됩니다.

1) 따옴표 내의 특수문자 사용

큰 따옴표를 이용한 문자열 표현에서는 다음과 같은 특수문자의 사용이 허용됩니다.

특수문자

의미

\n  개행문자 ( 줄 바꿈 )
\r  캐리지 리턴
\\  역 슬래쉬
\t  수평 탭
\" 따옴표
\$  달러 표시

예로 보여 드리겠습니다.

1
2
3
4
5
6
7
8
<?
    
echo "나는 문자열이예요~ ^^*<BR>\n"
    echo 
"우히히 정말 특별하죠? <BR>\r";
    echo 
"역슬래쉬를 보이려면 역슬래쉬 두개를~ \\<BR>";
    echo 
"탭\t 탭2<BR>";
    echo 
"따옴표 안에 따옴표를 넣으려면 \" <BR>";
    echo 
"달러 표시도 \$ <BR>";
?>

위와 같은 소스로 실행을 하게되면 다음과 같이 나타납니다.



3번째 줄에 \와 5번째 줄에 " 6번째 줄에 달러 ( $ )문자가 나온게 보이시죠? 그런데.. 개행문자와 캐리지 리턴, 그리고 탭은 된 건지 안 됐는지 모르겠군요. 그쵸? ^^;; 개행문자 등은 소스와 관계된 기능들입니다. 소스를 보기 좋게 정렬하는 등의 기능을 하기 위한거죠.

그럼 HTML 소스를 보겠습니다.



HTML 소스를 보시면 확실히 개행문자가 뭔지 보이시죠? 소스가 한 줄 바뀌었습니다. 캐리지 리턴은 커서를 제일 처음으로 보내기 때문에 개행문자와 같은 효과를 내게 되었습니다. 그리고 3번째 줄에 탭 부분을 보시면 빈 공간이 보이시죠? 그것이 탭이 먹힌 자리랍니다. ^^ 프로그램을 짜다보면 소스가 잘 정리되어있으면 버그 수정도 편하고 이것 저것 정말 도움이 많이 됩니다. 그러니 여러분도 조금 귀찮으시더라도 되도록이면 소스를 보기 좋게 잘 정리하세요^^

만약 따옴표가 표함되어 있는 문자열인데 역슬래쉬(\)문자를 쓰지 않았다면 어떻게 될까요?

1
2
3
<?
    
echo "따옴표 안에 따옴표를 넣으려면 " <BR>";
?>

이렇게 소스를 짜면 에러가 나게 됩니다.

왜냐하면 "(따옴표)와 " 사이가 문자열이라고 인식하게 되는데.. 문자열 안에 따옴표가 나와서 echo "따옴표 안에 따옴표를 넣으려면" 이만큼이 문자열이라고 인식합니다. 그렇게 되면 뒤에 <BR>"; 이 무슨 말인지 PHP는 인식하지 못하기 때문에 다음과 같은 에러를 냅니다.



조금은 이해하셨나요?
이 부분은 프로그램을 짜다보면 자연히 알게 되는 부분이니 가볍게 생각하시기 바랍니다. ^^

2) 따옴표 내의 변수사용

큰 따옴표내에서는 변수의 사용이 가능합니다. 예를 들어 $name 이라는 변수에 "조명진" 이라는 문자열이 저장되어 있다면,
$str = "나의 이름은 $name입니다.";
라고 하였을 때 $str = "나의 이름은 조명진입니다."; 와 같은 효과를 가지게 됩니다.

2. 작은 따옴표

'나는 문자열이다.' 와 같이 작은 따옴표 안에 문자열을 넣으면 됩니다.
작은 따옴표를 이용한 방법은 큰 따옴표를 이용할 때와 차이가 있는데,
작은 따옴표 내부에 쓰여진 특수문자와 변수가 허용되지 않는 다는 것입니다.
echo '작은 따옴표 안에서는\n 특수문자와 변수가 $name 동작을 안해요.';
의 결과는 작은 따옴표 안에서는\n 특수문자와 변수가 $name 동작을 안해요. 처럼 그대로 표현됩니다.

3. 히어닥 문법

$str = <<<EOD
문자열이라네~
나도 문자열이라네~

EOD;


와 같은 방법으로 문자열을 표현하는 것으로 큰 따옴표와 동일한 기능을 하며 따옴표를 역슬래쉬없이
사용할 수 있다는 장점이 있습니다.

문자열의 연산

문자열을 더하고자 할 때는 "." 기호를 사용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    $str 
"문자열";
    
$str $str " 좀더 붙여서..";
    
$str .= " 나도 끼워줘~\n";

    echo 
$str "<BR>";

    
$num 9;
    
$str "Number: $num";
    echo 
$str "<BR>";
    
$num 9;
    
$str 'Number: $num';
    echo 
$str "<BR>";
?>


위 소스에 대한 결과는 다음과 같습니다.


2번 줄에서 $str 변수에 문자열 이란 값이 입력되고,
3번 줄에서 기존의 $str 안의 값이 불려져 "문자열 좀더 붙여서.." 라는 문자열이 되고,
4번줄에서  $str .= " 나도 끼워줘~\n"; 에서 .= 기호는 $str = $str . 을 줄여놓은 것입니다.
따라서 문자열 좀더 붙여서.. 나도 끼워줘~ 라는 최종적인 문자열이 완성되는 것이죠.


8번부터 12까지는 큰 따옴표 안에 변수가 들어갔을 때와 작은 따옴표 안에 변수가 들어갔을 때 어떻게 다른지를 나타낸 것입니다.

참고.
눈치가 빠르신분은 아셨겠지만 문자열을 표시할 때 큰따옴표를 이용하면 따옴표 내부에 있는 것들을 한번 확인하는 절차가 필요합니다. 안에 변수가 있는지 특수문자가 있는지 확인하는 것이죠. 이런 절차를 파싱이라고 하는데 큰따옴표의 경우 파싱이라는 절차가 더 있기 때문에 당연히 작은 따옴표를 이용하는 것이 더 빠를 수밖에 없습니다. 물론 미소한 차이지만요. 따라서 단순 문자열 즉, 변수나 특수기호를 포함하지 않는 문자열을 표현하실 때는 작은 따옴표식 방법을 이용하는게 더 좋습니다.

 

728x90
복사했습니다!