다음 이전 차례

7. PHP 기본 문법

7.1 PHP 문법 구성과 작성

이 장에서는 php의 기본적인 문법 구성과 작성하는 요령을 살펴 보겠습니다. 대부분의 경우 C언어를 접한 경험이 있을테지만 혹 그렇지 않더라도 쉽게 배울 수 있습니다.

PHP 양식

1. PHP의 시작과 끝은 대부분의 경우 <?php    php 문장   ?>이라고 표시합니다. 또는 <?  ~ ?> 이렇게 짧게 줄여서 표시할 수도 있습니다. 
2. HTML을 스크립트에 표현할 때는 echo(" ~html~ "); 즉, echo문 안에 표현합니다. 
   이것은 반대로 HTML 문서 안에 스크립트를 사용할 경우 <? ~ ?> 안에 사용할 수도 있습니다.
3. 문장의 끝은 " ; "로 표시해 줍니다. (종종 문장의 종결을 표현하지 않아서 스크립트  오류가 자주 생깁니다.)
4. PHP 함수는 <? ~ ?> 영역 안에서 자유로이 사용 가능하며 변수 선언이 필요치 않습니다.
5. PHP 스크립트에서 주석은 // 또는  /* ~ */를 사용합니다.

변수의 형태

PHP에서 변수는 그 타입이 미리 정의되지 않는 것이 기본입니다. 다른 여러 언어에서는 변수 타입을 설정하지만 PHP는 자신의 값이 선언되면 자동적으로 알아서 타입을 바꾸어주는 것입니다.    그리고 변수를 선언할 땐 몇 가지 유의해야 할 것이 있습니다.

    1. 변수의 설명을 나타내는 이름을 사용하세요.
    2. 불필요하게 변수 이름에 대문자를 많이 사용하지 마세요.
    3. 한가지 형태를 유지해야 합니다.

    1~3번 이외에 여러 가지 유의할 부분들이 있을 것 입니다. 위에 부분들은 특히 주의할 부분들이며 항상 상기하기 바랍니다.
    · 숫자를 저장하는 변수(정수형, 실수형)

       $S = 4989 ; // 십진수, 양의 정수
       $S = -4989 ; // 음의 정수
       $S = 4.989 ;  , $S = 4.9E89 ; // 실수형 

    · 문자열 변수

       문자열은 큰 따옴표(") 안에 표시됩니다. 문자열 안에는 여러 가지 형태의     ESCAPED 캐릭터가 들어갈 수 있고, 
       문자열이 숫자로 인식될 경우는 그 형태가 문자열 안에 있는 숫자나 ‘e’ , ‘E’ 의 표시 여부에 따라 달라집니다.

        $S = 4 + "-9.8E9" ; // 실수형을 나타냅니다.
        $S = 4 + "CRY9" ; //  정수형 4입니다.
        $S = 4 + "9 CRY" ; // 정수형 13입니다.
        $S = 4 + "98.9" ; // 실수형을 나타냅니다.
        $S = "9 CRY" + 4 ; // 정수형 13입니다.
        $S = "SKYCRYZ" ; // 문자열 SKYCRY 입니다.
        
                          
    · 배열에서 변수

        여기서도 마찬가지로 변수의 형태를 선언할 필요가 없습니다.

        $S[0] =  "SKY" ; 
        $S[1] =  "CRY" ; 
        $S[2] =  "SKYCRY" ;
        $S[3] =  "14" ;


        결과 -> $S[0] =  "SKY" ;

            $S[1] =  "CRY" ;
            $S[2] =  "SKYCRY" ; 
            $S[3] =  "14" ;

        여기서 $S[] =  "SKY" , $S[] = "CRY" , $S[] =  "SKYCRY" ,
        $S[] = "14"로 표현해도 결과는 마찬가지입니다.

        배열을 표현에는 위의 방법도 있지만 array( ) 함수를 사용하는 방법도 있습니다.

            $S = array("NAME" => array(0 => "SKY"
                                                     1 => "MY NAME IS CRY"),
                       "NAMESUM" => array(
                                                             2 => "SKYCRY"
                                                                                 3 => "14")
              ) ;

이렇게 1차원 배열을 합해서 여러 형태의 다차원 배열도 만들 수 있습니다. 위 배열을 간단히 아래와 같은 스크립트로 출력할 수 있습니다.

    
    <?php    // PHP의 시작
        $S = array("NAME" => array(0 => "SKY"
                                             1 => "MY NAME IS CRY"),
                   "NAMESUM" => array(
                                             2 => "SKYCRY"
                                             3 => "14")
                   ) ;

        echo $S["NAME"][1];
        echo('<br>');
        echo $S["NAMESUM"][2];
    ?>

    …

그림.7-1 array 출력 화면

        · 객체형 변수
        
        객체란 관련 함수와 관련 변수의 집합체 입니다. 달리 말하면 CLASS라고 부르기도 합니다
        여기서 객체를 생성하는 방법을 간단히 보여드리겠습니다.
 
 
            Class skycry
            {      
                function cry()
                {
                    $connection = mysql_connect("localhost","mysql","");
                }
            }   // cry() 함수는 mysql 접속 함수입니다. 

            $connet = new skycry ; // new를 사용해서 skycry 객체를 생성합니다.
            $connet -> cry() ; // 객체 안에 cry( ) 함수를 불러옵니다.
                                 

       위의 방법으로 여러 가지를 한번 출력해 보았습니다.
       여러분은 밑의 방식으로 여러 가지 변수와 함수의 집합인 클래스를 만들어 사용할 수 있습니다. 

그림 7-2 객체 생성의 예

        위 예제의 경우 단순히 함수를 호출해서 출력 하는 부분입니다. 하지만 변수의 전달 인자를 설정하고
        각 함수를 출력하게 할 수도 있습니다. 
        즉, cry($a,$b)와 같이 $a ,$b의 값을 전달해서 해당 인자를 반영하게 할 수 있습니다.
        35,36,37행은 객체를 불러와서 출력하는 부분입니다.

그림 7-3 객체 출력 결과

    · 변수의 사용 범위

        PHP의 변수 범위는 선언되어진 부분만 가능합니다. 다시 말해 변수형태가 만들어진 부분에서만 사용가능
        합니다.   함수 안에 있는 변수와 전에 선언된 변수는 다르다는 것입니다.

            $S =  4
            function cry()
            {
                echo $S ; // 지역 변수
            }
            cry( ) ; // 4가 출력되지 않습니다.


        여기서  4가 출력 되게 하려면 함수 안에 변수를 다시 지정해 주어야 합니다.
        이것을 global 변수라고 합니다.
        함수 안에 global $S ;를 추가 했을 경우 4가 출력됩니다.

        이러한 방법 말고 다른 방법은 function cry($S)라 적어주면 됩니다.

그림.7-4 변수 사용범위 예

        위 예 42행의 변수는 함수 안의 변수 값 즉 지역 변수를 나타내고 44행은 함수 밖의 변수 값 즉 ,
        글로벌 변수 값 입니다.

그림.7-5 변수 사용범위 결과

    · 가변 변수

        변수의 이름은 PHP에서도 바꿀 수 있습니다. 이 방법을 사용하는 것은 조금 복잡합니다.
        구지 이 방법을 사용해야 할 경우 사용하는 것이 좋을 듯 합니다. 
        표현하는 방식이 어려운 것이 아니라 그 형식의 종류에 따라 혼동될 가능성이 많습니다.

            $$s = "bye jun" ; //변수에 변수를 줍니다.

그림. 7-6 가변 변수 예

        위의 가변 변수를 이용할 때 중요한 부분은 ${$s}에서 "{}"를 사용하는 것입니다.
        "{}" 적절히 사용해서 혼돈을 줄일 수 있습니다. 다른 곳에 적용할 때는 이것을 상기하기
        바랍니다.

그림.7-7 가변 변수 결과

    · Form 형식의 변수

        Form 형식의 변수는 자기 자신의 페이지나 다른 페이지로 하나 또는 여러 개의 변수를 전달하는 형식
        입니다.   Form의 형태를 우선 보면 
                
            <form method=~ action=~>
              <input type=~ name=~ value=~>
            </form>
                        
       각 인자의 역할은 아래와 같습니다.
       Method는 post(보낼 때)와 get(가져올 때) 인자를 사용합니다
       Action는 보내거나 가져올 개체를 적어줍니다.
       Type는 text(글일 경우), submit(입력 시) 등을 주로 사용합니다.
       Name는 원하는 명을 적어주면 그 명이 변수가 되어 보내거나 가져옵니다.
       Value는 name 이 변수로 보내질 때나 가져올 때의 값을 지정합니다.
       보다 자세한 form의 형태는 <url url="http://www.irt.org" name="http://www.irt.org"> 가면 상세한
       설명이 있습니다.. 
       이러한 폼 문의 형태는 주로 입력을 요하는 부분에서 사용합니다.
       글쓰기의 경우와 메일 등의 내용을 데이터베이스로 옮길 경우 그 변수로의 전달로 사용 하면 편합니다.

그림.7-8 폼 형식 변수 예

        위 소스 20행의 경우 name = friend[] 가 복수 변수로 만들어져 보내지는 것을 알 수 있습니다.
        이렇듯 폼을 이용해서 자동적으로 변수를 생성할 수 있습니다.
        그리고 submit를 이미지로 사용하는 방법은 아래와 같습니다.

            <intput type=image src= "image.gif" name = "put">

        put은 이미지에서 클릭한 위치를 (x , y로) 나눠서 두개로 전달 됩니다.
        put_x , put_y  

그림. 7-9 폼 형식 변수 결과

        소스 20행의 action="4-2-2form.php"  부분은 위 결과 화면에서 친구들을 선택하고 등록
        버튼을 눌렀을 때 해당 인자가 보내질 파일 이름입니다. 
        이 부분은 임의로 여러분들이 정해서 보내면 되지만 현재 위 소스는 자기 자신에게 인자를 전달 해야
        해당 선택 항목들이 출력 되게 됩니다. 
        여기서 4-2-2 form.php부분을 $PHP_SELF를 고쳐 자신에게 다시 인자들이 전달 되게 하는 방법도 있습니다.

 
 
    · 환경 변수

        환경변수는 PHP에 접속한 클라이언트의 IP와 웹 브라우저 등을 알아보는 역할을 합니다. 

        $REMOTE_ADDR  -  방문자의 IP를 알 수 있습니다.
        $HTTP_USER_AGENT   -  방문자의 웹 브라우저를 알 수 있습니다.

그림 7-10 환경 변수 예

그림.7-11 환경 변수 결과

        환경 변수를 사용해서 개인 홈페이지나 게시판 사용자의 구분을 표시하면 유용하게 사용할 수 있습니다.

 

    · 시간 변수

        시간을 나타내야 할 경우 date() 함수를 사용해야 합니다.
        이 함수를 호출 하는 선택 사항은 여러 가지가 있는데 아래의 표를 참고하세요.
        사용하는 방법은 변수를 만들어 사용할 수 있습니다.

           $date = date(Y-M-d : h/i/s a : l); 

  
        데이터 함수에 사용 하는 인자들

           a -  "am" 또는 "pm"
           Y -   "0000" 단위로 년도표시
           A -  "AM" 또는 "PM"
           w -  일요일부터 "0"으로 숫자로 표시
           d -  "00" 형식으로 날짜를 표시       
           y -  "00" 형식으로 년도 표시
           D -  "Mon, Tue" 요일을 3자리로 표시  
           z -  1월 1일부터 계산된 날수
           F -  "January" 형식의 달을 표시      
           H -  시간을 24시간으로 표시
           i -  분을 숫자로 표시                
           h -  시간을 12시간으로 표시
           l -  "Monday" 형식으로 요일표시     
           m -  월을 숫자로 표시
           M -  "Jan" 형식의 달을 약어로 표시   
           j -  "0"형식으로 날짜를 표시
           s -  초를 숫자로 표시

그림.7-12 시간 변수의 예

        위의 소스를 보면 여러 가지 데이터 인자를 사용해서 출력 하는 것을 볼 수 있습니다.
        여기서 date()함수 말고 중요히 여길 것이 있습니다. 바로 함수를 만들고 변수를 호출하는 것입니다.
        소스 11행의 경우 함수 안의 $d1을 출력 하기 위해 변수 값을 할당하는 부분입니다. 
        함수에 변수를 전달하는 방법이 global 명령 대신 이렇게 사용하는 것도 가능합니다. 

그림.7-13 시간 변수 결과

연산자

연산자의 경우는 만들어진 변수의 값끼리 연산을 하는 것입니다.    여러 가지 연산자를 이용해서 보다 간결하면서 명쾌한 표현을 하는 게 모든 이들이 추구하는 것입니다.    대부분의 문장은 표현식으로 이루어지므로 연산자는 꼭 들어" 마련입니다.    여기서 표현식이라 함은 하나의 변수에 특정한 값을 주는 것을 말합니다.

$a=4 이런 식으로 말이죠. 그리고 이 변수로 연산을 해도 마찬가지 입니다.

그럼 구체적으로 연산자의 종류와 기능을 알아 보겠습니다.

    · 산술연산자

        산술연산자는 말 그대로 산술연산("㉬쩝)을 수행합니다.

            $a + $b  :  $a 와 $b 의 합입니다.
            $a - $b  :  $a 와 $b 의 뺀값 입니다.
            $a * $b  :  $a 와 $b 의 곱한값 입니다.
            $a / $b  :  $a 와 $b 의 나눈값(몫) 입니다.
            $a % $b  :  $a 와 $b 의 나눈 나머지 입니다.


    · 문자열 연산자와 대입 연산자

        문자열 연산자는 문자열 끼리 연결하는 역할을 합니다. (".")로 표현 합니다.
        대입 연산자는 $a = 4와 같이 피연산자($a)에 (4)의 결과를 대입하는 것을 말합니다.
        (4) 부분은 여러분들이 어떠한 연산자를 사용해서 대입하는 겁니다.
        이러한 표현식은 위에서부터 보아온 소스를 참고하면 됩니다.

  
    · bit 단위 연산자

        bit단위 연산자의 경우는 정수의 개별적인 bit를 on, off 하는 역할을 합니다.

            $a & $b  :  AND  :  $a 와 $b가 1인 bit만 1이 됩니다.
            $a | $b  :  OR   :  $a 와 $b 중 하나라도 1인 bit면 1이 됩니다.
            ~$a      :  NOT  :  $a 와 $b 의 뺀값 입니다.
            $a << $b  :  Shift Left   :  $a 와 $b 의 곱한값 입니다.
            $a >> $b  :  Shift Right  :  $a 와 $b 의 나눈값(몫) 입니다.



    · 논리 연산자

        논리적인 연산을 수행 합니다.

            $a and $b  :  AND  :  $a 와 $b가 모두 참이면 참입니다.
            $a or $b   :  OR   :  $a 와 $b중 하나라도 참이면 참입니다.      
            $a xor $b  :  XOR  :  $a 와 $b중 하나만 참이면 참입니다.         
            !$a        :  NOT  :  $a 가 참이 아니면 참입니다. 
            $a && $b   :  AND  :  $a 와 $b가 모두 참이면 참입니다. 
            $a || $b   :  OR   :  $a 와 $b 중 하나라도 참이면 참이빈다. 


        "&&" 와 "and" 연산자 그리고 "or" 과 "||" 연산자는 대입하는
                
        변수의 우선 순위가 다르기 때문에 각각의 기능이 다릅니다.



    · 비교 연산자

        둘의 값을 비교해 줍니다. 위의 논리 연산자와 함께 비교 연산자 역시 제어 구조에 주로 사용됩니다.
        이 둘은 자주 사용할 것입니다. 
        능숙하게 적용하려면 자주 해보는 방법뿐이 없습니다. 

            $a == $b  :  $a 와 $b가 같으면 참입니다.     
            $a != $b   :  $a 와 $b가 다르면 참입니다.               
            $a <  $b  :  $a 가 $b보다 작으면 참입니다.              
            $a >  $b  :  $a 가 $b보다 크면 참입니다.                
            $a <=  $b  :  $a 가 $b보다 작거나 같으면 참입니다.       
            $a >=  $b  :  $a 가 $b보다 크거나 같으면 참입니다.       


    · 연산자 우선 순위

        동일한 상황에서 연산을 할 경우 우선하는 순위를 말합니다. 3+4*4 = 19입니다.
                
        "*" 연산자가 우선 순위를 가지기 때문입니다. 

        이러한 경우는 학교에서 배운 것과 같습니다. 하지만 몇 가지 추가될 부분이 있어 표를 첨부했습니다.

              Associativity           operators
            -------------------------------------------------------------------------------
              Non associativity       New
              Right                   [
              Right                   ! ~ ++ -- (int) (double) (string) (array) (object) @
              Left                    * / %
              Left                    + - .
              Left                    << >>
              Non associativity       < <= > >=
              Non associativity       == !=
              Left                    &
              Left                    ^
              Left                    |
              Left                    &&
              Left                    ||
              Left                    ? :
              Left                    = += -= *= /= .= %= &= != ~= <<= >>=
              Right                   Print
              Left                    And
              Left                    Xor
              Left                    Or
              Left                    .
            -------------------------------------------------------------------------------

그림.7-14 연산자 예 1

        30행과 42행은 if문을 사용해서 비교연산을 한 것입니다. "$a" 와 "$b" , "$e"가 같거나
        같지 안을 때를 비교해서 안의 내용을 출력하는 것입니다. 그리고 44행의 경우는 (" . ") 연산자를
        사용해서 문자열을 대입해 보았습니다.

        여러분도 여러 가지 만들어 보세요.

그림.7-15 연산자 예1 결과

그림.7-16 연산자 예 2

        여기선 30행 과 42행의 if 문에 "xor" 과 "&&" 연산자를 사용해 보았습니다. 
        전자는 대입된 둘의 변수 중에 하나만 참이어야 실행되고, 후자는 둘 모두가 참이어야 실행됩니다.
        그래서 첫번째(30행)의 if 문은 실행되지 않습니다. 그 다음의 35행이 실행되는 것입니다.
        그리고 42행까지 실행하는 것입니다.

그림.7-17 연산자 예2 결과

제어구조

제어 구조는 앞으로 여러분들이 많이 접하고 고민하는 부분일 것입니다.    제어 구조를 잘 파악하고 PHP 문장을 만들었을 때 무엇보다 그 문장들은 빛이 날 것입니다.    제어구조는 여러 가지가 있는데 조건문, 반복문, 함수 호출등 c언어와 유사한 부분이 많이 있습니다.    형태는 거의 C 문장이니 여러분들은 낯설지 않을 것입니다. 그러면 구문형태를 살펴 보도록 하겠습니다.

    · if 문
        
        앞에서 if문을 잠시 보았을 것입니다 
                
        형식 -  if(조건)
                {  문장 ;  }
                 
        해당 조건이 참이면 문장을 실행하고, 거짓이면 넘어갑니다.
                 
                    
    · else 문

        이 문은 if의 조건이 거짓이면 실행 하게끔 하는 것입니다.
                         
        형식  -  else{  문장 ;  }
                         
                           
    · elseif

        else와 if를 합쳐 놓은 것과 같습니다.
        전의 if 문이 거짓이고, 나머지 elseif 문이 거짓이면 이 문장을 실행합니다.

        형식  -  elseif(조건){  문장;  } 

        c와 같이 여러 개의 문을 사용해도 무관합니다.

그림.7-18 if , elseif , if   else 문 예

        여기서 elseif는 if의 조건이 거짓 이므로 자신의 조건을 검사한 후 출력하게 됩니다
        그리고 두 번째 if문은 마찬가지로 거짓이므로 else문을 출력합니다. 
        이렇듯 "if" 와 "else" , "elseif" 문은 표현식에서 전체적인 구조를 잡아주는 역할을 합니다.
        즉, 다시 그 안에 다른 제어구조 문이 들어가는 형태가 됩니다. 

그림.7-19 if , elseif , if   else 문 결과

        참고로 if 문과 while 문의 경우 "{ }" 대신에  " : "를 사용하는 방법도 있습니다. 


    · while 문

        while문은 조건에 충족 될 때까지 문을 반복합니다.

        형식 -  while( 조건 ) {  문장  }
         

그림.7-20 while문 예

        위 소스는 1에서 5까지 출력을 하는 루프입니다.
        이러한 소스는 여러 가지 다른 루프와 같이 사용할 수 있는데 필자는 " ,"를 추가해 보았습니다. 
        마지막 if 문을 보면 $a가 한번씩 증가 할 때마다 " , "를 출력해 주는 루프임을 알 수 있을 것입니다.

그림. 7-21 while 문 결과

    · do .. while 문

        do .. while 루프의 경우는 do 문장을 한번 실행하고 다음 while문을 수행 합니다.
        (최초 한번은 do 문장을 실행합니다.)

        형식 -  do { 문장 }while( 조건 ) 

그림.7-22 do .. while 문 예

        소스를 보면 일단 do 문(18행)은 한번 실행하는 것을 볼 수 있습니다.

그림.7-23 do .. while 문 결과

    · switch 문

        이 문은 if 문을 나열한 것과 형태를 같이 합니다.

그림.7-24 switch 문 예

        위 소스에서 switch문의 조건이 일치하는 case문을 실행 합니다. 
        $i가 2보다 작을 때까지 $i는 1씩 증가하며 switch문을 실행합니다. 
        처음 " 0"일 때 모두를 출력하고 다음 "1"일 때 case 0 이후의 모든 것을 출력합니다.

그림.7-25 switch 문 결과

        위 결과에서 switch 문을 사용하면서 문의 실행을 중지 시킬 필요가 있을 땐 " break ; "
        을 사용해서 중지시킬 수 있습니다.
        가령 $i 가 " 0 " 일 때 문 전부를 실행하지 않으려면 이 항목을 추가하는 것입니다. 

 
    · for 문

        자주 사용 해야하는 구문 중에 하나이고, 물론 해석 하기에 따라 어려운 구문일 수 있습니다.
        하지만 몇번 되풀이 하고 연습한다면 충분히 소화할 수 있습니다.

        형식  -  for( 인자 ; 인자2 ; 인자3 ) { 문장 }

        여기서 "인자"의 경우는 처음 시작할 때 일단 한번 실행을 합니다.
        그리고 "인자2" 의 경우 반복 될 때마다 한번씩 실행합니다. 
        마지막으로 "인자3"은 "인자2"의 결과에 따라 실행되어집니다.
        "인자2"가 거짓일 경우까지 계속 실행이 되는 것입니다. 다시 말하면, "인자2"가 참일 경우
        끝없이 실행되는 무한 루프도 있다는 말입니다. ("인자2"는 비워두고 for 문을 만들 수도 있습니다.) 
        for문의 예는 지금까지 배운 것과 나머지 것들을 응용해서 게시판에서 page 할당하는 것과 page 링크 수
        할당하는 것등을 설명하겠습니다.
   

그림.7-26 for문 예 1

        먼저 위 소스에서 변수들의 역할을 설명하겠습니다.
                
        $p_dip는 페이지당 글 수를 말합니다.
        $t_num은 총 글 수를 말합니다.
        $p_page는 한 page당 page 링크 수를 말합니다 ( [1] [2] [3] .. )
        $p_pagex는 "ceil()"로 계산하는 page링크 수 평균 값입니다.
        이 함수는 인자 값보다 작지 않은 최소의 정수를 구해 줍니다.
        $page는 현재 page 수를 나타냅니다.
        $pt_page는 시작할 page링크 숫자를 말합니다. 여기서도 ceil을 사용했는데 사용하지 않아도 됩니다.
        주로 " / "를 할 때 사용하는 것입니다.
        $next_p는 다음 페이지를 나타냅니다.
        $pre_p 는 이전 페이지를 나타냅니다.
                
        $start_num은 총 글 수에서 현재 page와 페이지당 글 수의 곱을 뺀 값입니다.
        그리고 이 변수는 현재 page에 출력될 글의 시작 번호를 가집니다.
        $last_num은 현재 page에 출력될 글의 마지막 번호를 가집니다. 이 변수는 여기서 직접 대입해서 사용
        하지 않았습니다. 그럼 차례로 문을 읽어보도록 하겠습니다.
                
        처음 21행에서 if문은 $page가 거짓일 때 "1"을 할당 합니다.
        처음 실행하면 물론 $page는 거짓이니 "1"이 할당 됩니다.
        그리고, 26행의 if문의 경우 38행의  $pt_page를 구하기 위해 사용합니다.
        잘 보시면 page 링크 평균 수보다 작을 경우 이 값에 "1"을 더해서 ( [1]..) 이 출력 되게 합니다. 
        다음 30행은 나머지 경우 $p_start 값을 정해 줍니다. 32행은 아직 미숙한 면이 있습니다.
                
        여러분이 잘 수정해 보시기 바랍니다.

그림.7-27 for문 예2

        드디어 45행에 for문이 나왔습니다. 이 행은 $pd의 값을 $start_num으로 하고 시작글 수에 한 page당
        출력될 글 수를 더한 값 보다 작거나 같을 때까지 증가 시키는 문 입니다.
        즉, 한 page당 출력될 글 수를 계산 하는 것입니다. ($start_num 에서 $start_num+$p_dip까지)
        하지만 여기서 중요한건 48행의 if문 입니다. 만약 출발 페이지가 ( - ) 일 경우 출력 되지 말아야
        되기 때문에 "0" 보다 클 때 라는 조건을 준 것입니다.
        60행의 시작 글 수는 ( - )값이 나와도 출력되는 것이 아니기 때문에 걱정하지 않아도 됩니다.
        제일 마지막 page란에 가면 이 경우가 생깁니다.
        (시작 번호를 보여주기 위해서 60행을 두었습니다)
        그리고 각각 56, 57행에 총page 수, 64, 65행에 현재 page 수를 나타내도록 했습니다.

그림. 7-28 for문 예 3

        69행의 for문은 ( [1] [2] [3]..)을 출력하기 위해 존재합니다.
        $pp는 링크 page의 시작 호를 나타내며 할당된 링크 page 수 만큼 계속 증가 합니다.
        73행의  if문은 현재 page일 경우 링크를 주지 않게 하는 것이고, 그 음 79행의 else문의 if문은
        ( - )는 표시하지 않고 현재 page에 출력될 링크 수 만큼 표시 하기위한 조건입니다.
        연산자를 사용해서 둘의 조건 모두가 참이어야 실행됩니다.

그림.7-29 for문 예 4

        여기서는 ( [1] [2] )의 표시 말고 "다음 page"와 "이전 page"를 표시해 주는 소스입니다.
        한 page씩 다음 page나 이전 page로 넘어갈 때 사용하는 링크입니다.
        103행의 if문은 $page가 "1"일 경우 "처음 page" 를 표시하고 링크를 주지 않는 것이고, 
        107행의 그 밖의 경우는 링크를 시켜 줍니다.
        115행의 if문의 경우도 $page가 총 page와 같을 경우 "마지막 page" 를 표시해 주고,
        120행의 그렇지 않을 경우 page를 링크 시켜 줍니다.
        이 소스를 다른 방식으로 여러분이 다시 만들어 보기 바랍니다.
        특히 page 링크 부분은 마지막 page 부분에서 할당된 page 수가 출력되지 않는 문제점이 있습니다.
        이점 숙지하시고 결과를 확인하겠습니다.

그림. 7-30 for문 결과 1

        결과를 보면 모든 링크가 잘 이루어져 있는 것을 확인 할 수 있습니다. 하지만 앞에서 말한 문제점이 있습니다. 
        뒷부분의 경매 게시판이나 주가 게시판 등의 소스를 보시면 조금 수정한걸 볼 수 있습니다. 
        하지만 이 소스에는 몇 가지 고쳐야 할 부분이 있습니다. 다음의 그림을 보면서 설명 하겠습니다.

그림.7-31 for 문 결과 2

        여기서 마지막 page는 링크가 할당된 수보다 2개 모자란 만큼 나타나는 것을 볼 수 있습니다. 
        이 소스는 db에 연결만 하면 바로 사용 가능 하지만 마지막 페이지 링크의 문제점만 해결 된다면
        더 좋은 소스가 될 것입니다. 

 
    이번 장에서는 PHP 문법이 어떻게 구성되는지 알아보았습니다.
        이 내용은 PHP 프로그래밍의 기본이므로 확실히 이해을 해야 합니다.
    다음 장은 이 장에 이어 본격적으로 PHP의 함수를 비슷한 기능별로 설명하겠습니다.


    참고 , 여기서 언급한 소스가 존재하지 않을 수 있으며 의문점은 메일로 질문하기 바랍니다.

다음 이전 차례