상세 컨텐츠

본문 제목

PHP 기초문법 및 변수

Web Development/Others

by thankee 2008. 7. 25. 05:02

본문

PHP문서의 작성

  1. <? ~ ?> 또는 <?PHP ~ ?>, <script language="PHP"> ~ </script>의 ~부분에 PHP 문장을 기술 하면 됩니다.
    (php.ini에서 short_open_tag = On으로 설정한 경우에만 <? ?>를 사용할 수 있습니다.)
  2. C언어와 거의 모든 문법이 동일합니다. 대소문자를 구별하며, 문장을 마칠 때는 반드시 ';'를 붙여야합니다.
    (<? ?>에서 뒤쪽의 '?'는 자체적으로 마침이라는 의미가 있으므로 세미콜론을 생략할 수 도 있습니다. <? echo "hello"; ?><? echo "hello" ?>로 표현 가능합니다.)
  3. HTML페이지로 출력하는 기본적인 함수는 echo를 사용합니다. echo "hello";, echo("hello"); 모두 동일한 표현입니다.
  4. 변수의 선언이 필요치 않으며, 어느 곳에서나 변수를 생성 사용할 수 있습니다. 변수의 타입의 지정이 필요없으며, 내부적으로 자동으로 타입에 맞게 형변환 되므로, 변수 타입에 대해 걱정할 필요가 없습니다.
  5. 변수의 선언은 문서의 어디서나 선언이 가능하며, 함수 외부에 선언된 것은 전역 변수, 함수 외부에 선언된 것은 지역 변수로 구분이 됩니다.
  6. 주석은 // 또는 /* */를 사용합니다.
  7. 몇몇 특수기호는 출력하기 위해 탈출문자를 사용해야합니다. 예를 들어 개행문자는 '\n', 슬러쉬는 '\\'로 표현할 수 있습니다.
  8. 일반적인 정수의 경우 1000억까지 표현이 가능하며, 그 이상부터 자동으로 지수 표기(E+) 됩니다.

변수

  1. PHP의 변수명은 예약어, 환경변수, 중복을 피해야 합니다.
  2. 변수의 타입은 내부적으로 자동으로 결정됩니다.
  3. 문자열은 기본적으로 ""(따옴표)안에 위치하게 되지만, 경우에 따라서 따옴표안에 위차한 문장도 숫자로 인식 되는 경우가 있습니다. 또한 따옴표가 없는 문장도 자동으로 문자열로 인식합니다. 이를 자동형변환이라 합니다
        $a = abcdef; //문자열 인식 정상 작동한다.
        $b = "12345"; //12345라는 문자열로 인식된다.
        $c = "1234" + 1; //"1234"는 문자열이지만 자동으로 형변환 되어 계산된다. 결과는 1235이다.
       
    $d = abcd + 3; //abcd에 숫자로 바꿀 수 있는 요소가 없으므로, 0으로 인식하여 0+3으로 계산 된다.
  4. 변수를 사용하기 위해서 변수의 선언이 필요 없으며, 따라서 변수명을 처음 사용한 곳이 해당 변수의 선언이 되는 것입니다.
  5. PHP에서 모든 변수는 '$'문자로 시작됩니다.
    $abc;
  6. PHP의 변수 확인
    -var_dump(); : '변수타입(변수값)'형태의 스트링을 리턴합니다.
    -is_type(); : type 대신에 변수 타입을 기술하면 됩니다. 타입이 일치하지 않으면 null, 일치하면 1을 반환합니다.
        $abc = 10;
        is_int($abc);
  7. 변수의 타입 :
    - boolean (또는 bool - PHP4.2 이 후 버전)
    - integer (또는 int - PHP4.2 이 후 버전)
    - float (또는 double - PHP4.2 이하 버전)
    - string
    - array
    - object
    - null (PHP4.2 이 후 버전)
  8. 변수의 형변환(Casting) : (변수형)으로 변수의 타입을 바꿀 수 있습니다.
        (int)"100"; //정수 100으로 변환된다.
  9. settype(변수, 타입) : 변수의 타입을 바꾸는 함수 입니다. 따라서 매개변수는 반드시 변수가 위치해야합니다. 타입으로 쓸수 있는 종류는 7 변수의 타입과 동일합니다. 사용 예는 아래와 같습니다.
       settype($abc, "string");
  10. 문자열의 표현
    문자열을 표현하기 위해서는 홀따옴표를 사용합니다. 쌍따옴표의 경우 역시 문자열로 인식하지만, 먼저 쌍따옴표 내부에 해석 가능한 문장이 있는지 찾아 해석한다음 문자열로 만든다는 차이점이 있습니다. 쌍따옴표를 사용하면 매우 간결하게 출력문을 작성할 수 있지만, 순수한 문자열의 경우는 홀따옴표를 사용하는 것이 바람직합니다.

전역변수

PHP에서 전역변수란 함수 내부에 위치한 변수를 제외한 모든 변수를 뜻합니다. PHP의 전역변수의 독특한 점은 함수 외부의 전역변수를 함수내부에서 곧바로 사용할 수 없다는 점입니다. 함수 내부에서 전역변수를 사용하기 위해서는 global 키워드를 사용하여야 합니다.

<?
    $a = 10;
    function test()
    {
        echo $a;
    }
    test();
?>

위 코드를 실행했을 때, 보통 다른 언어에서는 '10'을 출력하겠지만, PHP에서는 아무 것도 출력되지 않습니다. 함수 외부에서 선언된 $a는 전역변수로, 함수 내부에서 사용된 $a는 지역변수로 각각 다른 변수로 취급되기 때문입니다. 함수 외부에서 선언된 $a를 함수 내부에서 사용하기 위해서는 다음과 같이 global키워드를 사용해야합니다.

<?
    $a = 10;
    function test()
    {
        global $a; 
        echo $a;
    }
    test();
?>

일반적인 언어에서는 블록문안에서 선언된 모든 변수는 지역변수로 간주하지만, PHP에서는 함수내부에 변수만이 지역변수로 간주된다.

정적 변수

함수 내부의 변수는 지역변수이기 때문에 함수의 종료와 동시에 소멸됩니다. 하지만 함수가 종료되더라도 변수를 유지 시키고 싶다면 static키워드를 사용하면됩니다.

<?
    function test()
    {
        static $a;
        echo ++$a;
        echo " .";
    }
    test();
    test();
?>

출력 결과는 1, 2입니다.

배열

  1. 배열의 생성은 다음과 같은 방법이 있습니다.
    • array 함수의 이용.
      $arr = array("값1", 값2, 값3, array("값4", "값5"));
    • 첨자 직접 지정
          $arr[4] = "값1";
          $arr['a'] = 값3;
          $arr[10] = array("값10", "값11");
      배열 첨자는 마음대로 지정할 수 있습니다. 반드시 순서대로 지정할 필요 없으며, 중간에 첨자를 비워도 에러를 발생시키지 않습니다. 또한 첨자로 숫자와 문자열을 병행할 수 도 있습니다.
    • 첨자 없이 지정
          $arr[] = "1";
          $arr[] = "2";
          $arr[] = "3";
      이 경우 첨자가 자동으로 증가하며 값이 할 당 됩니다. 배열내의 가장 큰 정수형 첨자보다 1 큰 수 가 다음 첨자가 됩니다. 아래 예제를 보면,    
          $arr[4] = "1";
          $arr['name'] = "Son";
          $arr[2] = "45";
          $arr[] = "last";
      마지막에 배열에 "last"를 할당 하였는데, 그 값의 첨자는 자동적으로 5가 됩니다.
  2. 배열에 할당되는 값은 PHP에서 사용가능한 모든 값이 될 수 있습니다. 따라서 기존의 배열에 배열을 할당하면 다차원 배열이 됩니다.
  3. 배열의 크기를 알아내기 위해서는 sizeof()나 count()를 사용하시면됩니다.
        $a = array(1,2,3,4,5);
        echo sizeof($a);
        echo "<br>";
        echo count($a);
  4. 배열에서 특정 값 지우기 
        unset($배열명[]);  //배열에서 에 해당하는 데이터가 삭제됩니다.
  5. PHP에서 배열을 내부적으로 처리하는 방식
    PHP에서 배열은 키와 값으로 데이터를 저장하는 DataSet과 더 관련이 깊다고 볼 수 있습니다. 물론 다른 언어의 배열과 같이 숫자 첨자를 이용하여 배열 처럼 사용할 수 있지만, 내부적으로는 이 동작방식은 첨자를 Key로하여 데이터들을 관리하고 있다는 점입니다. 따라서 위와 같이 정수 첨자와 키 값을 동시에 하나의 배열에 지정할 수 있는 것입니다.
    기존의 언어에서 배열을 선언하면, 해당 배열의 크기만큼 연속적인 메모리 공간을 할당하지만, PHP에서는 선언이라는 것 자체가 없기 때문에, 필요할 때마다 키와 값으로 메모리에 저장하는 방식입니다.     $A = array("name" => "John", "age" => 25, "hobby" => "Collect"); 
    위와 같이 배열을 선언 할 수 있는데, 위와 같은 방식이 키와 값으로 데이터를 저장하는 방법입니다. 마디막으로 아래의 배열은 
        $A = array(1,2,3,4,5);
    내부적으로 다음과 같이 사용됩니다.
        $A = array(0 => 1, 1 => 2, 2 => 3, 3 => 4, 3 => 4, 4 => 5);
    그럼 $A[100] = 1;라고 정의할 때, 이 배열의 개수는 얼마일까요. 100이 아닌, 1입니다.

가변 변수

  1. 프로그래밍을 하다보면, 특정 변수에 할당 된 값을 이름으로 하는 변수를 참조하고 싶을 때가 있습니다. 예를 들어 사용자가 변수명을 입력하면, 그 변수의 값을 출력하는 프로그램을 만든다고 생각합시다.
        $Kim = 19;
        $Son = 20;
        $Lee = 45;
    위의 변수가 정의 되어 있고, 사용자가 "Son"이라는 값을 입력했다고 합시다. 위의 Son이라는 변수를 출력하기 위해서는 보통 if문이나 switch문을 사용할 것입니다. 
        if($input == "Kim")
            echo $Kim;
        if($input == "Son")
            echo $Son;
        if($input == "Lee")
            echo $Lee;
    하지만 PHP에서 지원하는 가변변수라는 것을 사용하면 보다 간결하게 표현할 수 있습니다.
        echo $$input;
    위의 문장은 $input의 변수의 값에 해당하는 변수를 찾아서 참조한다는 뜻입니다. 물론 해당 변수명에 해당하는 변수가 없으면 null을 반환합니다.
  2. '$$변수명'이라는 표현은 간혹 애매한 표현이 될 수 있습니다. 예를 들어 다음과 같은 문장이 있습니다.
        $$a[3];
    위의 문장은 a[3]에 해당하는 변수명을 찾으라는 뜻인지, $a에 해당하는 변수를 찾아 3이라는 첨자에 해당하는 값을 출력하라는 것인지 매우 혼동스럽습니다. 따라서 '${$a[3]}' 등으로 '{', '}'를 사용하는 것이 보다 바람직한 표현입니다. 
    (실제로 PHP는 후자의 방법으로 실행합니다. 즉, $a[3]을 먼저 참조한 뒤, 그에 해당하는 변수를 찾게 됩니다.)

관련글 더보기