2장 PHP 기초 이해 >> 목 표 << . PHP 프로그램 구조 . 변수의 이해 . 연산자의 이해 . 배열의 이해 및 사용 ★ 예제를 이해하여 함수와 언어에 대한 예약어의 다양한 사용 방법을 습득한다. 직접 코드를 입력하고 응용하여 프로그램을 변형한다. 생각해 볼까요? 1. 2002와 2006에 대하여 변수를 정의하고 +, -, /, *, %를 수행하여 결과를 보이시오. 2. 웹 브라우저에 자신과 부모님의 이름, 나이, 주소를 출력하고 나이는 평균을 구하여 출력하시오. 3. 1년이 몇 초인지 계산하는 프로그래을 작성하시오. 4. 임의의 5명의 정보를 다음과 같은 구조로 배열로 저장하고 내용을 출력하시오. 이사람, 70, 80, 85 저사람, 89, 70, 86 … 1. PHP 기초 PHP는 서버 사이드 스크립트 언어 HTML 안이나 바깥에 사용 가능 실행될 때, 스크립트 소스를 볼 수 없다. <? echo “hello PHP world!”; ?> <?php echo “hello PHP world!”; ?> <SCRIPT LANGUAGE=“PHP”> echo “hello PHP world!”; </SCRIPT> 1. PHP 기초 (cont’d) echo()는 브라우저에 문자열을 출력하는 함수 Client // echo.php <?php Server echo “<P>test<P>test”; echo “<hr>”; echo (“hello world<P>”); echo “<a href=aaa.htm>링크 </a><P>”; echo “<a href=aaa2.htm>링크2 </a><P>”; ● echo “<a href=‘aaa.htm’>링크3 </a><P>”; ?> “aaa.htm”을 사용할 수 <P> PHP 기초 테스트 <P> // HTML 없다. \”aaa.htm\”은 가능 <?php echo “마지막화면 출력”; ?> 1. PHP 기초 (cont’d) 설명 (comment) //: 한 줄 설명 #: 한 줄 설명 /* … */ : 여러 줄 설명 ● HTML의 경우 : <!-- …. --> 대소문자 구분 – 함수 이름과 키워드에 대해서는 구분하지 않음 – 변수 이름은 대소문자를 구분 1. PHP 기초 프로그래밍? – 데이터 하나, 복수 (배열) – 데이터 처리 데이터 입력/출력 데이터 처리 방법 (알고리즘) 프로그래밍의 생산성 향상? – 함수 : 지역 데이터 + 처리 – 클래스 : 데이터 + 함수 (cont’d) 2. 변 수 변수(變數)란? – 임시로 자료 값을 저장하는 저장 장소 – 그릇, 통장 PHP에서 변수 – 변수명은 대소문자 구분 $를 제외하고 알파벳이나 _가 변수명의 처음에 와야 한다. $i, $com, $student, $_name $family와 $Family는 다른 변수 2. 변 수 (cont’d) 변수형 (data type) – 정수형, 실수형, 문자열형 등 따로 구분하지 않고 $만 붙인다. – 정수형 – 실수형 – 문자열 <?php $aaa = 131; // 10진수 정수 $hex = 0x10; // 16진수 정수 $var = 0.091; $var = 91.0E-3; $a = “Hello World~!”; ?> 2. 변 수 (cont’d) 변수의 데이터형 (data type) – 정수형: -2,147,483,648 ~ 2,147,483,647 – 실수형: -1.7 E-308 ~ 1.7 E+308 범위를 벗어나면 자동으로 double형으로 변환 – 문자열: 작은 따옴표(‘)나 큰 따옴표(“)안에 표현 탈출문자(escape character) 의미 \n 새로운 라인 \t 탭 키 역할 \r 캐리지 리턴 \\ 백 슬래쉬 \$ 달러 표시 *단 탈출문자는 큰 따옴표 안에서 만 유효 – escape.php, data.php 2. 변 수 (cont’d) 변수의 종류 – – – – 전역변수 지역변수 정적변수 유동변수 : : : : 함수 외부에서 선언된 변수 global.php 함수 안에서 선언된 변수 local.php 한 번의 선언으로 기억공간이 확보된다.next sheet 변수를 지정하지 않아도 만들어 사용할 수 있음 ● ● <?php $lang="php"; function test() { global $lang; echo $lang; } test(); ?> ● ● <?php $a=1; function test(){ $a=5; echo $a; }; test(); ?> // static1.php <?php function test() { ● static $a = 1; // 정적 변수 echo “$a & nbsp;”; $a++; } function test2() { ● $a = 1; // 지역 변수 echo “$a &nbsp;”; $a++; } for ($i =1; $i < 10; $i++) // test()와 test2()함수의 10번 호출 { test(); test2(); } ?> // 유동변수 선언 $youngmoo = “lee-young-moo”; ● ● 2. 변 수 (cont’d) 변수의 형(타입) 변환 – 타입의 강제 변환 cast.php – 형 변환 연산자 연산자 의미 (int), (integer) 정수로 변환 (real), (double), (float) 실수로 변환 (string) 문자열로 변환 (array) 배열로 변환 – 타입의 자동 변환 cast2.php 크기가 작은 변수형이 큰 변수형으로 변환되어 연산 문자열은 수치형으로 변환 3. 연산자 (operators) 산술 연산자 예 의미 예 의미 $a + $b 더하기 $a and $b 둘 다 참일 경우, 참 $a - $b 빼기 $a or $b 하나라도 참일 경우, 참 $a * $b 곱하기 $a xor $b 둘 중에 하나만 참일 경우, 참 $a / $b 나누기 ! $a $a 가 거짓일 경우, 참 $a % $b 나머지 $a && $b $a and $b와 동일 $a || $b $a or $b와 동일 ★ 참 ★ 거짓 논리 연산자 : 비교 결과가 true, 또는 숫자는 0 이외의 값, 문자는 비어 있지 않을 때 : 비교 결과가 false, 또는 숫자 0, 문자는 비어 있을 때 문자열 연산: ” . ” – 문자열 연결 $a = “hello”; $b = $a.”World!”; 3. 연산자 (cont’d) 비교 연산자 예 의미 $a == $b 두 개의 값이 같으면 참 $a != $b 두 개의 값이 다르면 참 $a < $b $b 값이 크면 참 $a > $b $a 값이 크면 참 $a <= $b $b 값이 크거나 같으면 참 $a >= $b $a 값이 크거나 같으면 참 연산자 우선순위 : – 연산자 중에서도 먼저 연산하는 순서가 존재 – pp.84 참고 4. 배열 C언어에서 int ahouse; int apartment[100]; 4. 배열 (cont’d) PHP에서 – C언어와 유사함 – 여러 개의 데이터를 하나의 이름으로 관리 <?php $array[]= 1; $array[]= "사람들2"; $array[]= 3; echo $array[0]."<P>"; echo $array[1]."<P>"; echo $array[2]."<P>"; ?> 실행 결과로 알 수 있는 것은? <?php $array[2]="lee young moo"; $array[1]="Like LOVE"; $array[0]="lee seung yun"; echo $array[0]."<P>"; echo $array[1]."<P>"; echo $array[2]."<P>"; ?> <?php $a["who"]="lee young moo"; $a["are"]="Play BaseBall"; echo $a["who"]."<br>"; echo $a["are"]."<br>"; echo (count($a)); ?> 4. 배열 (cont’d) PHP에서 배열의 특징 – 배열의 변수명은 ‘$’로 시작, ‘[ ]’로 종료 – ‘[ ]’안에 사용되는 색인(첨자)은 정수 또는 문자열을 사용 – – – – $array[3], $array[“lee”] 배열 변수의 첨자는 0부터 시작 선언이 없음, 값을 할당하면 자동으로 변수형이 결정 첨자 지정도 자동으로 증가 예제: array1.php, array2.php array3.php 4. 배열 (cont’d) 첨자의 사용: 정수 또는 문자열 배열에서 키(key)와 값(value)의 의미 >> 배열 days에서 key와 value의 의미 << key value 0 1 2 3 “Sunday” “Monday” “Tuesday” “Wednesday” >> 배열 color에서 key와 value의 의미 << key “ext” “trim” value “blue” “black” “fab” “das” “yellow” “hunter green” 4. 배열 (cont’d) array()를 이용한 배열 값의 할당 <?php ● // 자동 첨자를 사용하는 경우 $person = array (“lee young moo”, “play soccor”, “so won ho”); ● // 첨자를 사용하는 경우 $person = array (“lee young moo”, 3 => “play soccor”, “so won ho”); echo $person[0].“<P>”; // ‘.’의 의미를 잘 기억하시오. echo $person[1].“<P>”; // 문자열 연결 연산자 echo $person[2].“<P>”; ?> 4. 배열 (cont’d) list()와 foreach() – 왜? 일반 변수와 다르게 값의 관리가 복잡하다. – 배열을 조작하기 위한 함수 – 내부적으로 foreach()의 수행 속도가 빠르다. 4. 배열 (cont’d) List()함수를 사용한 경우 // array7.php <?php // 키(첨자)를 사용하여 배열 생성 ● $colors = array(“ext”=>”blue”,”trim”=>”black”,”fab”=>”yellow”,”das”=>”hunter green”); reset($colors); ● while(list($key,$value) = each($colors)) { print “$key: $value<BR>”; } ?> while 문과 같이 사용한 이유? 4. 배열 (cont’d) List($key, $value)와 each($color)의 의미 “ext” “trim” “blue” “black” “fab” “yellow” “hunter green” each() 배열에서 현재의 키와 값 쌍을 반환하고 배열 커서를 전진시킨다 key = “ext” value = “blue” list() 변수에 목록화 한다 “das” “ext” “blue” 4. 배열 (cont’d) foreach()함수 – while + list() + each()와 같은 기능 foreach($color as $key => $value) foreach($color as $value) 로 사용할 수 있음 – 앞의 프로그램을 foreach()를 이용하여 표현하시오. <?php // 키(첨자)를 사용하여 배열 생성 $colors = array(“ext”=>”blue”,”trim”=>”black”,”fab”=>”yellow”,”das”=>”hunter green”); reset($colors); ● foreach($color as $key => $value) { print “$key: $value<BR>”; } ?> foreach()를 이용한 다른 예제 1 <?php $arr = array("one", "two", "three"); reset ($arr); print "while 문 사용 : while (list(\$key, \$value) = each \$arr))<br>"; while (list($key, $value) = each ($arr)) { echo "키값=> $key, 배열값: $value<br>\n"; } print "<br>"; print "foreach 문 사용 : foreach (\$arr as \$value) <br>"; foreach ($arr as $value) { echo "값: $value<br>\n"; } ?> foreach()를 이용한 다른 예제 2 <?php /* foreach example 1: 배열 값만 출력 */ $a = array (1, 2, 3, 17); print " 배열값만 출력<br>"; print "배열: \$a = array (1,2,3,17), foreach문: foreach (\$a as \$v) , 출력: print \$a : \$v <br>"; foreach ($a as $v) { print "\$a => $v<br>\n"; } print "<br>"; /* foreach example 2: 키와 값 */ print "키값과, 배열값 출력<br>"; print " 배열: \$a = array (1,2,3,17), foreach문: foreach (\$a as \$k=>\$v) , 출력: print \$a[\$k] : \$v <br>"; $a = array (1, 2, 3, 17); foreach ($a as $k => $v) { print "\$a[$k] => $v <br>\n"; } ?> foreach()와 클래스 : 4장 – 클래스 안의 멤버 변수들을 배열과 같이 출력한다. <?php class person { var $firstName = "Joe"; var $lastName = "Bloggs"; var $age = "25"; } $person = new person; foreach ($person as $key=>$val) { echo "$key = $val\n"; } ?> 5. 배열 관련 함수 ★★ http://kr.php.net/함수이름 kr.php.net/sort print_r(), var_dump() <!– print1.php --> ● <pre> <?php $a = array(“a”=>”사과”,”b”=>”바나나”,”c”=>array(‘x’,’y’,z’)); ● print_r($a); ?> ● </pre> void sort(array array [, int sort_flags]) – 배열값중에서 작은 것부터 정렬 sort1.php, sort2.php void ksort (array array [, int sort_flags]) – 키 값으로 정렬 sort3.php void asort (array array [, int sort_flags]) – 배열 값으로, 알파벳 순서에 따라 sort5.php void unset(mixed var [, mixed var [, …]]) – 배열 값을 제거 sort6.php 비교 int array_push(array array, mixed var[, mixed …]) – 배열에 새로운 요소를 배열 끝에 추가 sort9.php mixed array_pop (array array) – 배열 끝의 구성 요소를 제거 sort10.php bool in_array(mixed needle, array haystack [,bool strict]) – 어떤 값이 배열 안에 존재하는지 검사 sort12.php int sizeof(mixed var, [, int mode]) – count()와 같은 기능, 배열의 크기를 반환 sort13.php array array_count_values(array input) – 배열 안에 같은 값이 얼마나 나왔는지 수를 배열구조로 반환 – sort15.php reset() – 배열 포인터를 첫 번째 값으로 이동 next() – 다음 포인터로 이동 current() – 현재 포인터의 값을 의미 end() – 배열의 끝 구성 요소로 이동 sort16.php >> 실습 문제 << 임의의 5명의 정보를 다음과 같은 구조로 배열로 저장 하고 내용을 출력하시오. 이동자, 70, 80, 85 백민진, 89, 70, 86 황승주, 88, 5, 0 김제명, 90, 98, 100 신숭규, 100, 40, 배열 구조 출력 각 과목에 대한 평균 출력 각 학생에 대한 총합 출력 이름에 대하여 정렬(오름차순) 총합에 대하여 정렬 +------+------+--------+------+--------------+------------+ | name owner species sex birth death +------+------+--------+------+--------------+------------+ | Fluffy Harold cat f 1993-02-04 NULL | Claws Gwen cat m 1994-03-17 NULL | Buffy Harold dog f 1989-05-13 NULL | Fang Benny dog m 1990-08-27 NULL | Bowser Diane dog m 1979-08-31 1995-07-29 | Chirpy Gwen bird f 1998-09-11 NULL | Whistler Gwen bird NULL 1997-12-09 NULL | Slim snake m 1996-04-29 NULL hamster f 1999-03-30 NULL Benny | Puffball Diane +------+------+--------+------+--------------+------------+ 다차원 배열 C언어에서 score[0][0] score[0][1] score[0][2] score[0][3] score[1][0] score[1][1] score[1][2] score[1][3] 다차원 배열 ● 2차원 배열은 print()나 echo() 함수 안의 따옴표 안에서 출력하려면 괄호를 사용해야 한다. ● ● ● ● ● ● ●