변수

php에서는 다른언어와 달리 변수를 선언할때 $(스트링)을 붙여서 사용합니다.

ex) 타 프로그램 언어

int var;

var = 10;

php에서는

$var = 10;

이렇게 사용됩니다.

변수 선언시에는 @,#,%,&,- 등의 특수문자나 숫자를 넣어서는 안된다.

두개의 단어를 변수로 지정하고자 할때는 언더바를 사용하는 경우도 있고, 카멜표기법을 사용하기도 합니다.
예를 들어 언더바를 사용하는 경우는
$my_car
이렇게 사용합니다.
카멜표기법은 카멜은 낙타를 뜻하는 영어단어이며, 낙타의 등 모양처럼 작성하는 방법을 말합니다.
처음시작하는 단어의 첫문자는 소문자를 사용하며 그 다음오는 다른 단어의 첫문자만 대문자를 사용합니다. 예를 들어
$myCar
위와 같이 사용합니다. 주로 카멜표기법을 많이 사용하니 카멜표기법을 사용해 주면 좋습니다.

<?php
echo "변수 선언 하는 법<br />";
$num = 33;
$num2 = 33.33;
$studentName = "hong gil dong";
echo "\$num = $num <br />";
echo "\$num2 = $num2 <br />";
echo "\$studentName = $studentName";
?>

위의 소스에서 변수명 앞에 \를 쓰는이유가 궁금할 것입니다.

echo " "; 안에서 변수명을 쓰면 그 변수의 값이 출력이 되지만 앞에 \를 붙여주면 그 변수명이 출력됩니다.

즉 $num 이라고 쓰면 결과가 33이 나오지만 \$num 을 쓰면 결과가 $num이 나옵니다.

혹시 다른 프로그래밍 언어를 공부하신 분이라면 변수 형 지정에 대해서 이상하다고 느끼실수 있습니다.

어째서 실수에 float 를 정수에 int를 지정하지 않는거지 라고 생각할것입니다..

php에서는 변수의 데이터형을 따로 지정해 주지 않으며. 그 변수에 따라서 데이터형이 자동으로 결정됩니다.

조금 편하죠. ^^ 혹시 프로그래밍을 경험해 보지 않은 분이시라면 보통 다른 프로그래밍 언어에서는 문구를 변수에 넣을때 변수 선언전 문구라는 표시를 숫자라면 숫자라는 표시 실수라면 실수라는 표시를 해주지만 php는 자동으로 해줍니다.

같은 변수명의 다른 값이 입력된다면 나중에 입력된 값으로 치환이 됩니다.

예를 들어 아래와 같은 소스가 있다고 한다면

<?php
  $num = 55;
  echo "$num";
  $num = 66.66;
  echo "$num";
?>

$num 은 정수형에서 실수형으로 타입이 변경됩니다. 무슨 말씀이신지 잘 모르시는분 계실수도 어차피 하다보면 나중에 이해가 됩니다. 이걸로 왜 안되지 하면서 시간 낭비 하지 않으셔도 됩니다.

gettype을 사용하면 변수의 데이터형을 알 수 있습니다.

예를 들어 echo gettype($num);

을 입력하면 $num의 데이터형이 출력됩니다.

정수는 integer

실수는 double

다음은 자동 형변환

수학 = 100 점

영어 = 95 점

과학 = 85 점 의 총점과 평균을 구하는 프로그램이라할때

평균점수는 연산결과에 따른 변수의 형변환이 된다.

<?php
  echo " 3과목의 평균을 구해보아요 ";
  echo "---------------------------- <br />";

  $math = 100;
  $english = 95;
  $science = 85;

  $sum = $math + $english + $science;       // < ===== $sum이라는 변수를 만들고 값은 3과목의 합이다.
  $avg = $sum/3;                                           //     3으로나눠서 평균값이 $avg의 값이 된다.

  echo " math point : $math <br /> english point : $english <br /> science point : $science <br />";

  echo "======================== <br />";

  echo " total : $sum <br />";

  echo " average : $avg <br />";

  echo "======================== <br />";

  echo " what is the type of \$avg?  <br />";

  echo gettype($avg);
?>

결과 값은

아래와 같다. 보시다 싶이 $avg 는 데이터형이 double로 되어있다.

php image

정수형의 오버플로우 형변환...

정수형 값의 표현인 (-2147483648 ~ 2147483647)를 초과하게 되면 정수형이 아닌 실수형으로 넘어가게 됩니다.

아래의 예제에서 var_dump()라는 함수를 사용합니다. 이 함수는 데이터형과 값을 출력해줍니다. 실무에서 많이 사용하니 기억해 주세요.^^;

그럼 테스트를 해보자!!!

<?php
  echo "오버플로우 형 변환 <br />";
  echo "------------------------ <br />";
  $num = 2147483647; // 범위안에 가장 큰 수를 넣는다.
  echo "변수 \$num 출력 결과 <br />";
  var_dump($num);  // 값과 데이터형을 출력
  echo "
.........[정수형으로 출력]<br /><br />"; $num += 1; // 이것은 $num에 +1을 한다는거에요 나중에 설명 나와요. echo "변수 \$num +1의 출력결과 <br />"; var_dump($num); echo "
.................[실수형으로 출력]"; ?>

위의 소스를 보면 기존 num 값에 +1을 하였더니 integer의 값의 한계를 넘어서버려서 float로 데이터형이 바뀌어버렸다..

아래는 결과

php image

위의 결과를 확인했는데 여전히 integer로 표시되는 경우도 있다. 이는 에러가 아니다.
32비트 환경에서는 정수형 표현은 (-2147483648 ~ 2147483647)이다.
64비트 환경에서는 정수형 표현은 (-9223372036854775808 ~ 9223372036854775807)이다.
위의 코드에서 2147483647를 9223372036854775807로 변경하여 다시 테스트 해보자.

<?php
    echo "오버플로우 형 변환 <br />";
    echo "------------------------ <br />";
    $num = 9223372036854775807; // 범위안에 가장 큰 수를 넣는다.
    echo "변수 \$num 출력 결과 <br />";
    var_dump($num);  // 값과 데이터형을 출력
    echo "<br>.........[정수형으로 출력]<br /><br />";
    $num += 1;  // 이것은 $num에 +1을 한다는거에요 나중에 설명 나와요.
    echo "변수 \$num +1의 출력결과 <br />";
    var_dump($num);
    echo "<br>.................[실수형으로 출력]";
?>

아래는 결과

php image

제가 이렇게 정리하는것을 보면서 언제 초급을 땔까 고민하시는 분들이 계신다면 걱정하지 마세요.
이 강좌는 mysql php연동 및 로그인 기능까지 갑니다.

이미 한번 소스코딩 하면서 책 대충 한번 훑어보고 다시 한번 제가 책을 2회독 시작하면서 제대로 이해를 하기 위해 올리는 강좌입니다.

이렇게 남한테 설명한다 생각하고 배우면 더 잘 설명이 들어오더라고요..

혼자서 이제됐다하고 그냥 넘어가는 것보다는..

문자열 안에서 변수 해석

echo문 안에서 변수를 입력할때 주의해야 할점이 있다.

예를 들어

<?php
    $name = "asimo";
    echo " $nameis a robot   <br />";
    echo " $name is a robot <br />";
    echo " {$name}is a robot ... ";
?>

아래는 결과

첫번째 문장에서 변수를 $nameis 로 인식을 하여서 $nameis 라는 변수가 선언되지 않아서 아무것도 표시가 되지 않았습니다.

2번째 줄은 정상이구요 띄어쓰기로 인해 정상적인 출력

세번째는 띄어쓰기는 하지 않았지만 {} 로 확실한 구분을 해주어서 출력이 되었습니다.

php image