변수
변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간
즉, 변수란 데이터를 저장할 수 있는 메모리 공간이며, 저장된 값은 변경될 수 있음
=> js에서 var나 let
변수의 선언
PHP에서는 달러($)기호를 사용하여 다음과 같이 변수를 선언
$변수이름 = 초깃값;
PHP에서 변수를 선언 할 때는 변수의 이름 앞에 달러($) 기호를 사용하여 선언
또한, C언어와는 달리 변수를 선언할 때 따로 타입을 명시하지 않음
PHP 에서 변수의 타입은 해당 변수에 대입하는 값에 따라 자동으로 결정!
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>PHP Variables</title>
</head>
<body>
<?php
$var = 10; // 정수값 대입
echo gettype($var);
echo ": $var <br>";
$var = 3.14; // 실수값 대입
echo gettype($var);
echo ": $var <br>";
$var = "PHP"; // 문자열 대입
echo gettype($var);
echo ": $var";
?>
</body>
</html>
>>>결과
integer : 10
double : 3.14
string : PHP
변수 이름의 생성 규칙
변수의 이름은 그 변수가 가지는 데이터 의미를 잘 나타내도록 작성
반드시 지켜야 하는 5가지 규칙!!
1. 변수의 이름은 영문 대소문자, 숫자, 언더스코어(_) 로만 구성2. 변수의 이름은 숫자와의 구분을 빠르게 하기위해 숫자로 시작x3. 변수의 이름에 공백 x4. 변수의 리음으로 PHP에서 미리 정의한 $this는 사용 x5. 변수의 이름은 대소문자를 구분
변수의 이름 뒤에 다른 문자가 오게되면 변수의 이름을 정확히 인식하지 못함 => 변수의 이름을 중괄호로 감싸서, 어디까지가 변수의 이름인지를 명확히 명시
$var = 10;
echo "$var"; //10
echo "{$var}" //10
echo "변수 \$var에 저장된 값은 $var입니다."; //변수 $var에 저장된 값은 .
echo "변수 \$var에 저장된 값은 {$var}입니다."; //변수 $var에 저장된 값은 10입니다.
변수 뒤에 다른 문자가 나오게 되면 PHP파서는 "$var" 라는 변수의 이름을 찾는 대신에
"$var입니다" 라는 이름을 가진 변수를 찾음
변수의 초기화
PHP에서는 반드시 변수의 선언과 동시에 그 값을 초기화 할 필요가 없음
초기화 x -> 해당 변수가 참조되거나 사용되는 위치에 따라 다음과 같은 기본값으로 자동 초기화 됨.
//선언되지 않은 변수의 기본값
var_dump($var); // NULL
//초기화 되지 않은 불리언 타입 변수의 기본값
echo $bool ? "true<br>":"false<br>"; //false
//초기화 되지 않은 정수 타입 변수의 기본값
$int += 10; var_dump($int); // 0 + 10 = 10
//초기화 되지 않은 실수 타입 변수의 기본값
$fit += 3.14;var_dump($fit); // 0.0 + 3.14 = 3.14
//초기화 되지 않은 문자열 타입 변수의 기본값
$str .= "프로그래밍"; var_dump($str) //""."프로그래밍" = "프로그래밍"
//초기화 되지 않은 배열 타입 변수의 기본값
$arr[2] = "2번째 배열요소";var_dump($arr); // array(1){[2]=>string(21)"2번째 배열 요소"}
변수의 종류
PHP에서는 변수의 유효 범위에 따라 변수의 종류를 다음과 같이 구분
1. 지역변수 (local variable)
2. 전역변수 (global variable)
3. 정적변수(static variable)
지역변수(local variable)
함수 내부에서 선언된 변수는 오직 함수 내부에서만 접근 가능
함수의 호출이 종료되면 메모리에서 제거
function varFunc(){
$var = 10; //지역 변수로 선언함
echo "함수 내부에서 호출된 지역 변수 var의 값은 {$var} 입니다. <br>";
}
varFunc();
echo "함수 밖에서 호출된 지역 변수 var의 값은 {$var} 입니다.";
>>>결과
함수 내에서 호출한 지역 변수 var의 값은 10입니다.
함수 밖에서 호출한 지역 변수 var의 값은 입니다. PHP Warning: Undefined variable $var in /home/jdoodle.php on line 18
함수 밖에서 지역 변수를 참조하려고 하면 아무런 값도 얻을 수 없음
전역변수(global variable)
함수 밖에서 선언된 변수는 함수 밖에서만 접근
함수 밖에서 선언된 변수를 함수 내부에서 접근하고자 할때 => global 키워드를 함께 사용
$var = 10; //전역 변수로 선언함
function varFunc() {
echo"함수 내부에서 호출한 전역 변수 var의 값은 {$var}입니다.<br>";
global $var' //함수 내에서 사용할 전역 변수를 명시함.
echo"함수 내부에서 호출한 전역 변수 var의 값은 {$var}입니다.<br>";
}
varFunc();
echo "함수 밖에서 호출한 전역 변수 var의 값은 {$var}입니다.";
>>>결과
함수 내에서 호출한 전역 변수 var의 값은 입니다.
함수 내에서 호출한 전역 변수 var의 값은 10입니다.
함수 밖에서 호출한 전역 변수 var의 값은 10입니다. PHP Warning: Undefined variable $var in /home/jdoodle.php on line 15
위의 예제에서 맨 처음 호출한 echo 함수는 아무런 값도 출력하지 못함.
하지만 global 키워드로 명시하고 나서 다시 호출한 echo 함수는 정확한 전역 변수의 값을 출력
PHP 는 모든 전역 변수를 $GLOBALS 배열에 저장,
이 배열에 인덱스로 변수의 이름을 사용하면, 해당 전역 변수의 값에 접근할 수 있음
이 배열은 함수 내부에서도 접근할 수 있으며, 이 배열을 통해 바로 전역 변수의 값을 변경할 수도 있음
$var = 10; //전역 변수로 저장함
function varFunc(){
echo"함수 내부에서 호출한 전역 변수 var의 값은 {$var}입니다.<br>";
echo"함수 내부에서 호출한 전역 변수 var의 값은 {$GLOBALS['var']}입니다.<br>";
}
varFunc();
echo "함수 밖에서 호출한 전역 변수 var의 값은 {$var} 입니다.";
>>>결과
함수 내에서 호출한 전역 변수 var의 값은 입니다.
함수 내에서 호출한 전역 변수 var의 값은 10입니다.
함수 밖에서 호출한 전역 변수 var의 값은 10입니다. PHP Warning: Undefined variable $var in /home/jdoodle.php on line 15
슈퍼 글로벌 (superglobal)
PHP 는 미리 정의된 전역 변수인 슈퍼 글로벌 (superglobal)을 제공
슈퍼 글로벌은 선언 없이 스크립트 내의 어디에서라도 바로 사용
**PHP 에서 제공하는 슈퍼 글로벌 **
1.$GLOBALS
2.$_SERVER
3.$_GET
4.$_POST
5.$_FILES
6.$_COOKIE
7.$_SESSION
8.$_REQUEST
9.$_ENV
정적변수(static variable)
정적 변수란 함수 내부에서 static 키워드로 선언한 변수
함수 내부에서 선언된 정적 변수는 함수의 호출이 종료되더라도 메모리상에서 사라지지 않음
function counter(){
static $count = 0;
echo "함수 내부에서 호출한 static 변수 count의 값은{$count} 입니다.<br>";
$count++;
}
counter();
counter();
counter();
>>>결과
함수 내에서 선언한 정적 변수 count의 값은 0입니다.
함수 내에서 선언한 정적 변수 count의 값은 1입니다.
함수 내에서 선언한 정적 변수 count의 값은 2입니다.
위의 예제에서 정적 변수인 $count는 함수의 호출이 종료된 후에도 계속해서 그 값 유지
상수(constant)
상수란 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간
하지만 상수가 변수와 다른점은 한번 선언되면, 스크립트가 실행되는 동안 그 데이터를 변경하거나 해제할 수 없음
define()함수
PHP에서는 define()함수를 사용하여 상수를 선언
define() 함수의 원형
define(상수이름, 상숫값, 대소문자구분여부)
이 함수는 첫 번째 인수로 상수의 이름을 전달받고, 두 번째 인수로 그 값을 전달받음
세 번째 인수는 상수의 이름이 대소문자를 구분하는가를 설정하며, 기본값은 false로 대소문자를 구분합니다.
<예제>
define("PHP","PHP수업에 잘 오셨습니다.<br>"); //대소문자를 구분함. (기본설정)
echo PHP; // PHP 수업에 잘 오셨습니다.
echo php; //php
define("PHP","<br>PHP수업에 잘 오셨습니다!",true); //대소문자를 구분하지 않음
echo php; //PHP 수업에 잘 오셨습니다!
echo Php; //PHP 수업에 잘 오셨습니다!
이렇게 선언된 상수는 스크립트의 어디에서라도 참조할 수 있음
단, 해당 상수가 선언되기 이전의 스크립트 영역에서는 해당 상수를 참조할 수 없음
<예제>
function defFunc()
{
echo PHP; //PHP
define("PHP","PHP 수업에 잘 오셨습니다.");
echo PHP; //PHP 수업에 잘 오셨습니다.
}
defFunc();
echo PHP; //PHP 수업에 잘 오셨습니다
위의 예제에서 상수가 선언되기 전의 영역에서 호출한 echo()함수는 해당 상수의 값을 참조하지 못함
또한, 함수 내부에서 선언된 상수가 함수의 호출이 종료된 후에도 사용할 수 있음!
마법 상수(magic constants)
PHP는 어떤 스크립트에서도 사용할 수 있는 미리 정의된 다양한 상수를 제공
다음 예제는 PHP에서 미리 정의된 모든 상수를 출력해 주는 예제
<예제>
echo"<pre>";
print_r(get_defined_constants(true));
echo"</pre>";
PHP는 위와 같이 미리 정의된 상수 외에도 어디에 사용하느냐에 따하 용도가 변경되는 8개의 마법 상수를 제공
마법 상수는 대소문자를 구분하지 X
__LINE__ | 파일의 현재 줄 번호를 반환 |
__FILE__ | 파일의 전체 경로와 이름을 반환 |
__DIR__ | 파일의 디렉터리를 반환 |
__FUNCTION__ | 함수의 이름을 반환 |
__CLASS__ | 클래스의 이름을 반환, 대소문자 구분 |
__TRAIT__ | 트레이트의 이름을 반환 |
__METHOD__ | 클래스의 메소드 이름을 반환 |
__NAMESPACE__ | 현재 네임스페이스의 이름을 반환 |
function magicCons(){
echo __LINE__; //파일의 현재 줄 번호를 반환함
echo __FUNCTION__; //함수의 이름을 반환함
echo __METHOD__; // 클래스의 메소드 이름을 반환함
}
magicCons();
>>>결과
14
magicCons
magicCons
기본 타입
PHP가 제공하는 기본타입
1.불리언
2.정수
3.실수
4.문자열
5.배열
6.객체
7.리소스
8.NULL
불리언(boolean)
불리언은 참(true) 과 거짓(false)을 표현
PHP 에서 불리언은 상수인 true와 false를 사용해 나타냄, 대소문자 구분X
PHP에서 다음 값들은 불리언 타입으로 변환 시 , 모두 false로 인식
- 불리언 : false
- 정수 :0
- 실수: 0.0
- 빈 문자열과 문자열"0"
- 빈 배열
- NULL
이 외에 모든 값들은 true로 인식(음수 포함)
<예제>
var_dump((bool)false); //false
var_dump((bool)"false") //true
var_dump((bool)0); //false
var_dump((bool)-100); //true
var_dummp((bool)0.0); //false
var_dump((bool) ""); //false
var_dump((bool) "0"); //false
var_dump((bool) array()); //false
var_dump((bool) null); //false
문자열 "false"는 빈 문자열이나 "0"이 아니므로 true로 인식
정수(integer)
정수는 부호를 가지는 소수부가 없는 수를 의미
PHP에서는 부호가 없는 정수는 지원하지 않음
<예제>
echo "integer 타입의 크기는 ".PHP_INT_SIZE."바이트 입니다.<br>";
echo "integer 타입이 표현할 수 있는 가장 큰 수는 ".PHP_INT_MAX."입니다.<br>";
$int_01 = 100;
$int_02 = 2147483647; // integer가 표현 할 수 있는 범위를 넘지 않는 값을 대입함
$int_03 = 2147483648; // integer가 표현 할 수 있는 범위를 넘는 값을 대입함
PHP_INT_SIZE 는 정수 타입의 크기를 나타냄
따라서 상수 PHP_INT_MAX 의 값은 정수 타입이 표현 할 수 있는 가장 큰 수를 가르킴
PHP 에서는 변수에 정수의 최대 범위를 넘는 값이 대입되면, 그 변수는 자동으로 실수형으로 인식
>>>결과
integer 타입의 크기는 8바이트 입니다.
integer 타입이 표현할 수 있는 가장 큰 수는 9223372036854775807 입니다.
int(100)
int(9223372036854775807)
float(9.223372036854776E+18)
실수(float)
실수는 소수부나 지수부를 가지는 수를 의미, 정수보다 더 넓은 표현 범위
<예제>
$float_01 = 3.14;
$float_02 = 1.23e-4;
$float_03 = 1.8E307; // float이 표현할 수 있는 범위를 넘지 않는 값을 대입
$float_04 = 1.8E308; // float이 표현할 수 있는 범위를 넘는 값을 대입
PHP에서는 e지수 표현과 E지수 표현이 모두 가능
또한, 변수에 실수의 최대 범위를 넘는 값이 대입되면 그 변수는 자동으로 미리 정의된 상수인 INF로 인식
>>>결과
float(3.14)
float(0.000123)
float(1.8E+307)
float(INF)
문자열(string)
문자열은 일련의 연속된 문자들의 집합
PHP에서 문자열 리터럴은 큰따옴표("")나 작은따옴표('')로 감싸서 표현
UTF-8 인코딩 환경에서 영문자는 한 글자당 1바이트,
한글은 한 문자당 3바이트로 표현
<예제>
$str_01 = "PHP";
$str_02 = "자바스크립트";
echo strlen($str_01); // 3
echo strlen($str_02); // 18
배열(array)
PHP에서 배열(array)은 한쌍의 키와 값으로 이루어진 map으로 구성되는 순서가 있는 집합을 의미
맵의 키값으로는 정수와 문자열만 가능
하나의 배열에 두 가지 키값을 같이 사용할 수 있음
**정수와 문자열 이외에 다른 타입의 값을 키값으로 사용하면 내부적으로 다음과 같이 타입 변환이 이루어짐**
- 불리언은 true는 1로, false는 0으로 자동 타입 변환
- 유효한 숫자로만 이루어진 문자열은 정수나 실수로 자동 타입 변환
- 실수는 소수부분 제거, 정수로 자동 타입 변환
- NULL은 빈 문자열로 자동 타입 변환
- 배열과 객체는 배열의 키값으로 사용할 수 없음
<예제>
$arr = array(
1 => "첫 번째 값", //PHP의 배열에서 키값의 1과 "1"은 같은 값을 나타냄.
"1" => "두 번째 값", //같은 키값을 사용하여 두 번 선언했기 때문에 나중에 선언된 "두 번째 값" 만 남게됨
10 => "세 번째 값",
-10 => "네 번째 값"
);
var_dump($arr);
echo $arr[1];
echo $arr["1"];
echo $arr[10];
echo $arr[-10];
첫 번째 요소의 키 값인 1과 두 번째 배열 요소의 키값인 "1"은 같은 값으로 저장
PHP에서는 같은 키값으로 여러 번 맵을 선언할 경우, 그 키에 해당하는 값을 계속 덮어써서
맨 마지막에 선언된 값만을 저장
>>>결과
array(3) { [1]=> string(14) "두 번째 값" [10]=> string(14) "세 번째 값" [-10]=> string(14) "네 번째 값" }
두 번째 값
두 번째 값
세 번째 값
네 번째 값
객체(object)
객체는 클래스의 인스턴스를 저장하기 위한 타입
class Lecture {
function Lecture() {
$this->lec_01 = "PHP";
$this->lec_02 = "MySQL";
}
}
$var = new Lecture; // 객체 생성
echo $var->lec_01; // 객체의 속성 접근
echo "<br>";
echo $var->lec_02;
>>>결과
PHP Warning: Undefined property: Lecture::$lec_01 in /home/jdoodle.php on line 22 PHP Warning: Undefined property: Lecture::$lec_02 in /home/jdoodle.php on line 24
리소스(resource)
리소스는 PHP 외부에 존재하는 외부 자원을 의미
데이터베이스 함수 등에서 데이터베이스 연결 등을 반환할 때 사용
NULL
NULL은 오직 한 가지 값(NULL 상수) 만을 가질 수 있는 특별한 타입
<예제>
$var_01;
var_dump($var_01); //초기화 되지 않은 변수를 참조
$var_01 = 100;
var_dump($var_01);
unset($var_02); //$var_01 변수를 삭제함
var_dump($var_02); //삭제된 변수를 참조
PHP에서 초기화 하지 않은 변수는 NULL로 자동 초기화
*unset()함수는 인수로 전달받은 변수를 메모리에서 삭제하는 함수*
>>>결과
NULL
int(100)
NULL PHP Warning: Undefined variable $var_01 in /home/jdoodle.php on line 13 PHP Warning: Undefined variable $var_01 in /home/jdoodle.php on line 21
자동 타입 변환(type juggling)
PHP에서는 변수를 선언할 때 타입 명시 X
해당 변수에 대입하는 값에 따라 자동으로 결정 -> "자동 타입 변환"
$var = "문자열" //string
$var = 10; //int
$var = 3.14; //float
강제 타입 변환(type casting)
PHP에서는 강제 타입 변환을 타입 캐스트 연산자인 괄호(())를 사용하여 수행할 수 있음
<예제>
$var_01 = 10;
var_dump($var_01); // int(10)
$var_02 = (boolean) $var_01;
var_dump($var_02); //bool(true)
$var_03 = 0;
var_dump($var_03); //int(0)
$var_04 = (boolean) $var_03;
var_dump($var_04); //bool(false)
>>>결과
int(10)
bool(true)
int(0)
bool(false)
가변 변수(variable variables)
PHP에서는 변수의 타입뿐만 아니라 변수의 이름까지 동적으로 바꿀 수 있음
이러한 변수를 "가변변수" 라고 함
$PHP = "HTML";
$HTML = "CSS";
$CSS = "JavaScript";
$JavaScript = "Ajax";
$Ajax = "PHP";
echo $PHP; //HTML
echo $$PHP; //$HTML->CSS
echo $$$PHP; //$$HTML -> $CSS -> JavaScript
echo $$$$PHP; //$$$HTML -> $$CSS -> $JavaScript -> Ajax
echo $$$$$PHP; //$$$$HTML -> $$$CSS -> $$JavaScript -> $Ajax -> PHP
http://www.tcpschool.com/php/php_basic_typeJuggling
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com