서버측 언어를 사용하는 이유
숫자와 문자
예제
/number_string/number.php
https://github.com/egoing/phpeverybody/blob/master/number_string/number.php
1
2
3
|
<?php
var_dump(6.1);
?>
|
/number_string/string.php
https://github.com/egoing/phpeverybody/blob/master/number_string/string.php
1
2
3
|
<?php
echo "그는 \"안녕하세요 라고 말했다\"";
?>
|
변수
변수(變數, Variable)는 문자나 숫자 같은 값을 담는 컨테이너다. 여기에 담겨진 값은 다른 값으로 바꿀 수 있다. 변수는 마치 (사람이 쓰는 언어인) 자연어에서 대명사와 비슷한 역할을 한다.
변수의 선언
다음 예제는 변수에 값을 대입하는 방법을 보여주는 예제다.
/variable/variable1.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable1.php
1
2
3
4
5
6
7
8
9
10
11
|
<html>
<body>
<?php
$a=1;
echo $a+1; #2
echo "<br />";
$a=2;
print $a+1; #3
?>
</body>
</html>
|
#은 주석(comment)으로 코드에 부가적인 설명을 쓰거나 사용하지 않는 코드를 비활성화시키기 위해서 사용한다. #뒤에 따라오는 내용은 해석되지 않는다. # 대신에 //를 사용할 수도 있다. 긴 구간을 주석으로 처리하고 싶다면 /* */를 사용한다.
위의 실습 결과는 각각 2와 3이 출력될 것이다. 변수 $a에 담겨 있는 값이 1일 때는 $a+1의 결과가 2가 된다. 두번째 결과가 3이 된 것은 $a의 값이 2로 바뀌었고, 2+1의 결과인 3이 출력된 것이다.
다음 예제는 변수의 값이 꼭 숫자만 올 수 있는 것은 아니라는 것을 보여주기 위해서 만든 예제다.
/variable/variable2.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable2.php
1
2
3
4
5
6
7
8
|
<html>
<body>
<?php
$first = "coding";
echo $first." everybody";
?>
</body>
</html>
|
변수가 없다면
변수는 코드의 재활용성을 높여준다. 예를들어서 100에 10을 더하고, 10을 나눈 후에 다시 10을 빼고 거기에 10을 곱해야 한다고 치자. 그리고 각 단계마다 그 결과를 출력해야 한다면 코드는 아래와 같을 것이다.
/variable/variable3.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable3.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<html>
<body>
<?php
echo 100+10;
echo '<br />';
echo (100+10)/10;
echo '<br />';
echo ((100+10)/10)-10;
echo '<br />';
echo (((100+10)/10)-10)*10;
echo '<br />';
?>
</body>
</html>
|
그런데 계산해야 할 값을 100이 아니라 1000으로 바꿔야 한다면 위의 코드를 모두 수정해야 할 것이다. 변수를 적용해보자.
/variable/variable4.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable4.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<html>
<body>
<?php
$a = 100;
$a = $a + 10;
print $a.'<br />';
$a = $a / 10;
print $a.'<br />';
$a = $a - 10;
print $a.'<br />';
$a = $a * 10 ;
print $a.'<br />';
?>
</body>
</html>
|
위의 코드에서 첫번째 줄의 100을 다른 숫자로 바꾸면 나머지 로직에 대입되는 변수의 값이 모두 바뀐다. 수정해야 할 코드가 적다는 것은 그만큼 해야 할 일이 줄어든다는 의미고, 그 과정에서 버그가 발생할 가능성을 낮출 수 있다. 변수의 효용은 뒤에서 배우게 될 반복문, 조건문, 함수와 결합되면 더욱 더 중요해진다.
상수
상수(常數, constant)는 변하지 않는 값이다. 예를들어 아래는 성립 될 수 없다.
1
|
1=2;
|
즉 정수 1은 2가 될 수 없기 때문에 상수이다. 필요에 따라서 사용자가 직접 상수를 정의 할 수도 있다. 아래 예제를 보자.
/variable/variable8.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable8.php
1
2
3
4
5
6
7
8
9
|
<html>
<body>
<?php
define('TITLE', 'PHP Tutorial');
echo TITLE;
define('TITLE', 'JAVA Tutorial');
?>
</body>
</html>
|
결과는 아래와 같다.
1
2
|
PHP Tutorial
Notice: Constant TITLE already defined in C:\BitNami\wampstack-5.4.20-0\apache2\htdocs\variable\variable8.php on line 6
|
상수를 정의 할 때는 define를 사용한다. define의 첫번째 인자로 상수의 이름이 사용되고, 두번째 인자로 상수의 값이 사용된다. 상수에 저장된 값을 사용하기 위해서는 인용부호가 없이 상수의 이름을 적어주면 된다. 위의 예제는 PHP Tutorial를 출력 하지만 동시에 오류를 발생시킨다. 위의 코드는 한번 정의된 상수의 값은 불변이라는 원칙을 어기고 있기 때문에 PHP에서는 오류를 발생시킨 것이다. 상수는 한번 정의된 어떤 값이 변경되지 않음을 보증한다. 이러한 성질을 이용해서 설정 값과 같은 용도로 상수를 주로 사용한다.
변수에 담긴 데이터 형을 검사하고 변경하기
PHP에서 변수에 담긴 데이터 형을 검사할 때는 gettype과 settype을 사용한다. 아래는 이 명령들의 사용법이다.
/variable/variable5.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable5.php
1
2
3
4
5
6
7
8
9
10
11
|
<html>
<body>
<?php
$a = 100;
echo gettype($a);
settype($a, 'double');
echo '<br />';
echo gettype($a);
?>
</body>
</html>
|
위의 코드를 실행해보면 integer(정수)와 double(실수)가 출력된다. $a에 어떤 데이터형이 담겨있는지 알아보기 위해서 gettype을 사용했다. gettype은 인자로 전달된 값의 데이터 형을 출력한다. var_dump와 비슷 하지만 var_dump는 데이터형에 대한 검사와 함께 출력까지 강제로 하기 때문에 활용도가 떨어진다. settype은 첫번째 인자로 주어진 값을 두번째 인자에 해당하는 데이터 형으로 변경해준다.
이와 비슷한 역할을 하는 API로는 아래와 같은 것이 있다.
- is_ array
- is_ bool
- is_ callable
- is_ double
- is_ float
- is_ int
- is_ integer
- is_ long
- is_ null
- is_ numeric
- is_ object
- is_ real
- is_ resource
- is_ scalar
- is_ string
변수의 데이터 타입
PHP는 다른 언어들과는 다르게 변수에 담길 값의 데이터 형식을 미리 지정할 필요가 없다. 아래의 예제를 보자.
/variable/variable6.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable6.php
1
2
3
4
5
6
7
8
9
|
<html>
<body>
<?php
$a = 100;
$a = "test";
$a = array(1,2,3);
?>
</body>
</html>
|
위의 코드는 PHP에서는 아무런 문제가 없다. 이것은 PHP의 장점이면서 단점으로 이야기 되기도 한다. 즉 변수 $a를 선언할 때 변수에 어떤 값이 들어가야 하는지 미리 지정 할 필요가 없다. 필요에 따라서 다른 형식의 데이터를 넣으면 변수의 데이터 형식이 자동으로 변경된다. 이것은 매우 편리 하지만, 변수에 어떠한 형식의 데이터가 담겨있는지를 예측할 수 없기 때문에 오류가 발생할 가능성이 높아지기도 한다.
가변변수
variable variables. 가변변수는 변수의 이름을 변수로 변경 할 수 있는 기능이다. 이것은 코드로 이해하는 것이 더욱 빠르다.
/variable/variable7.php
https://github.com/egoing/phpeverybody/blob/master/variable/variable7.php
1
2
3
4
5
6
7
8
9
|
<html>
<body>
<?php
$title = 'subject';
$$title = 'PHP tutorial';
echo $subject;
?>
</body>
</html>
|
위의 코드를 보면 변수 $title의 값이 subject이다. 그런데 5행에 나타나는 '$$title'에는 '$'가 두번 표시되어 있다. 이것은 문자열 'PHP tutorial'이 변수 $title의 값이 아니라 변수 $subject의 값이라는 의미다. 변수의 이름을 동적으로 만들 수 있다는 점은 PHP가 가진 유연함을 보여준다.
참고
비교
프로그래밍의 비교 기능은 이것만으로는 효용이 크지 않다. 후속 수업인 조건문에서 그 효용이 드러나기 때문에 조금 지루하더라도 조건문까지만 인내하자.
연산자
연산자란 값에 대해서 어떤 작업을 컴퓨터에게 지시하기 위한 기호인데 우리는 이미 연산자를 사용했다. 아래 예제 중에서 '='는 우항의 값인 1을 좌항의 변수 a에 대입하는 '대입 연산자'다. PHP의 주요 연산자는 PHP의 메뉴얼을 참고하자. 연산자가 무엇인가에 대한 이해를 돕기 위한 것일 뿐 외울 필요는 없다. 차차로 알게 된다.
1
|
$a=1;
|
비교 연산자
프로그래밍에서 비교란 주어진 값들이 같은지, 다른지, 큰지, 작은지를 구분하는 것을 의미한다. 이 때 비교 연산자를 사용하는데 비교 연산자의 결과는 true나 false 중의 하나다. true는 비교 결과가 참이라는 의미이고, false는 거짓이라는 뜻이다. 아래는 주요한 비교 연산자들의 종류와 그에 따른 예제들이다.
==
좌항과 우항을 비교해서 서로 값이 같다면 true 다르다면 false가 된다. '='가 두개인 것을 주의하자. '='가 하나인 것은 대입 연산자로 좌항의 값을 우항의 변수에 대입할 때 사용하는 것으로 의미가 완전히 다르다.
/compare/compare1.php
https://github.com/egoing/phpeverybody/blob/master/compare/compare1.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<html>
<body>
<?php
echo "1==2 : ";
var_dump(1==2); #false
echo '<br />';
echo "1==1 : ";
var_dump(1==1); #true
echo '<br />';
echo '"one"=="two" : ';
var_dump("one"=="two"); #false
echo '<br />';
echo '"one"=="one" : ';
var_dump("one"=="one"); #true
echo '<br />';
?>
</body>
</html>
|
결과는 아래와 같다.
1
2
3
4
|
1==2 : bool(false)
1==1 : bool(true)
"one"=="two" : bool(false)
"one"=="one" : bool(true)
|
!=
'!'는 부정을 의미한다. '같다'의 부정은 '같지 않다'이다. 이것을 기호로는 '!='로 표시한다. 아래의 결과는 !=의 결과인데 ==와 정반대의 결과를 보여준다.
/compare/compare2.php
https://github.com/egoing/phpeverybody/blob/master/compare/compare2.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<html>
<body>
<?php
echo "1!=2 : ";
var_dump(1!=2); #true
echo '<br />';
echo "1!=1 : ";
var_dump(1!==1); #false
echo '<br />';
echo '"one"!="two" : ';
var_dump("one"!="two"); #true
echo '<br />';
echo '"one"!="one" : ';
var_dump("one"!="one"); #false
echo '<br />';
?>
</body>
</html>
|
결과는 아래와 같다.
1
2
3
4
|
1!=2 : bool(true)
1!=1 : bool(false)
"one"!="two" : bool(true)
"one"!="one" : bool(false)
|
>
/compare/compare3.php
https://github.com/egoing/phpeverybody/blob/master/compare/compare3.php
좌항이 우항보다 크다면 참, 그렇지 않다면 거짓임을 알려주는 연산자다. '<'는 반대의 의미로 언급은 생략하겠다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<html>
<body>
<?php
echo "10>20 : ";
var_dump(10>20); #false
echo '<br />';
echo "10>1 : ";
var_dump(10>1); #true
echo '<br />';
echo '10>10 : ';
var_dump(10>10); #false
?>
</body>
</html>
|
결과는 아래와 같다.
1
2
3
|
10>20 : bool(false)
10>1 : bool(true)
10>10 : bool(false)
|
>=
좌항이 우항보다 크거나 같다. '<='는 반대의 의미로 언급은 생략하겠다.
/compare/compare4.php
https://github.com/egoing/phpeverybody/blob/master/compare/compare4.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<html>
<body>
<?php
echo "10>=20 : ";
var_dump(10>=20); #false
echo '<br />';
echo "10>=1 : ";
var_dump(10>=1); #true
echo '<br />';
echo '10>=10 : ';
var_dump(10>=10); #true
?>
</body>
</html>
|
결과는 아래와 같다.
1
2
3
|
10>=20 : bool(false)
10>=1 : bool(true)
10>=10 : bool(true)
|
===
/compare/compare5.php
https://github.com/egoing/phpeverybody/blob/master/compare/compare5.php
===는 좌항과 우항이 정확하게 같다는 의미다. ==와의 차이점은 ==이 형변환의 결과를 비교 하지만, ===는 양쪽 항이 데이터 형식까지 정확하게 동일해야 같은 것으로 인정한다는 점이다. 형변환이란 PHP가 코딩의 편의성을 위해서 맥락에 따라서 알아서 데이터의 형식을 변환해주는 것을 의미한다. 이에 대한 자세한 내용은 후속 수업을 통해서 살펴볼 예정이다. 아래의 예제를 보자.
1
2
3
4
|
echo "1 == '1' : ";
var_dump(1 == '1');
echo "<br />1 === '1' : ";
var_dump(1 === '1');
|
'서버 > PHP' 카테고리의 다른 글
[PHP][생활코딩] 입출력 긜고 폼과 HTTP / 조건문 / 반복문 / 함수 / 배열 (0) | 2022.07.25 |
---|---|
[PHP][생활코딩] 첫번째 PHP 에플리케이션 (0) | 2022.07.25 |
[PHP][생활코딩] Window 에서 PHP 설정 (Bitnami) (0) | 2022.07.21 |
[PHP][생활코딩] 윈도우에 PHP 설치하기 (0) | 2022.07.21 |
PHP란 무엇인가? [생활코딩] (0) | 2022.07.20 |