변수
변수는 타 언어와 마찬가지로 값을 담을 수 있는 메모리 공간입니다. 객체의 경우에는 메모리의 주소가 저장되어 힙영역에 있는 값을 참조할 것입니다. 그 외에는 일반적인 스택 메모리에 저장이 되겠지요. PHP 는 동적인 언어입니다. 따라서 런타임 중에 변수의 값이 자유자재로 변경될 수 있습니다. 이는 자바스크립트나 파이썬과 비슷합니다. PHP 의 변수는 변수의 이름 앞에 $
를 붙여서 선언할 수 있겠습니다.
$message = 'Hello, world'; // String
$userCount = 0; // Int
$pi = 3.14; // Double
$is_visited = false; // Boolean
$temp = null; // NULL
변수 사용하기
일반적으로 변수를 사용하려면 그저 $
기호와 함께 변수의 이름을 적어주면 됩니다.
$message;
문자열 내부에서 사용하기
문자열 내부에서 변수를 사용하는 것은 일부 규칙이 있습니다. 먼저, '
로 구성된 문자열 내부에서는 변수를 사용할 수 없고, 반드시 "
를 사용한 문자열 내부에서만 변수를 사용할 수 있습니다.
// -> The message is $message
'The message is $message';
// -> THe message is Hello, world
"The message is $message";
Here DOC & Now DOC
Here Doc, Now Doc 이라는 것은 PHP 에서 제공하는 흥미로운 기능입니다. 일반적으로 문자열을 구성할 때 사용하는 큰 따옴표와 작은 따옴표를 통해서 문자열을 표현할 수 있지만, 특수한 케이스에는 Here Doc, Now Doc 이라는 것을 사용할 수 있습니다.
아래의 코드에서는 시작을 나타내는 <<<
과 더불어 Here Doc 의 이름인 HTML
이 있습니다. 이는 그저 이름일 뿐이므로 임의로 정해줄 수 있습니다. 이름 부분에서 'HTML'
이 된다면 이는 Now Doc 이며, 변수가 적용되지 않습니다. 즉, Here Doc 은 큰 따옴표 같은 것이고 Now Doc 은 작은 따옴표 같은 것이죠.
<<<HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>HTML Template</title>
</head>
<body>
<h1>$message</h1>
</body>
</html>
HTML;
가변 변수
가변 변수는 변수를 선언할 때 변수의 이름을 다른 변수의 값으로 대체할 수 있는 것을 말합니다. 아래의 코드를 보면, $varName
변수의 값을 $$varName
라는 형태로 사용하여 결과적으로 $message
라는 변수가 선언 된 것을 볼 수 있습니다.
$varName = 'message';
// $message = 'Hello, world';
$$varName = 'Hello, world';
var_dump($message); // -> Hello, world
변수의 할당 해제하기
변수의 할당을 해제하는 방법은 언어구조 unset()
을 사용하면 메모리에서 변수가 릴리즈 됩니다.
unset($message);
변수의 스코프
스코프는 글로벌 스코프와 함수 스코프 이 두가지만 존재합니다. 즉, 자바스크립트 처럼 블록 스코프가 아니기 때문에 블록 내부에서 선언된 변수라고 할 지라도 블록 밖에서 접근할 수 있습니다.
if (true) {
$variableScope = 'Hello, world';
}
// -> Hello, world
echo $variableScope;
글로벌 스코프 & 함수 스코프
최상위에 설정된 변수가 글로벌 스코프에 있으며 이는 함수 내부에서도 접근할 수 있고, 함수 내부에서 글로벌 스코프 변수에 값을 할당할 수도 있습니다. 함수 내부에서는 $GLOBALS
슈퍼 글로벌 변수로 글로벌 스코프에 있는 변수에 접근합니다. 그 외에 함수 내부에서 선언된 변수는 함수 스코프로 일반적으로 함수 밖에서는 이에 접근할 수 없습니다.
$message = 'Hello, world';
function foo()
{
// global $message;
$GLOBALS['message'] = 'Who are you?';
// $message = 'Who are you?';
// echo $message;
}
정적 변수로 값 유지하기
일반적으로 함수가 끝나면 함수 내부에 선언된 로컬 변수는 스택에서 릴리즈되어 더는 접근할 수 없게되지만, static
키워드로 정적 변수를 선언하면 함수가 끝나더라도 함수 내부에서 값이 유지됩니다.
function foo2()
{
static $count = 0;
}
// $count = 0
foo2();
// $count = 1
foo2();
클로저로 함수 내부의 값을 얻어오기
함수 내부에 있는 값을 일반적으로 return
을 통해서 밖으로 내보내지만, Closure
를 사용하면 함수를 리턴함으로써 함수 내부에 선언된 변수의 값에 접근할 수 있게됩니다.
추가적으로 자바스크립트와 같은 언어와는 다르게 function
키워드를 통해 익명 함수를 정의할 때 외부의 변수에 접근하려면 use
키워드를 사용해야 합니다. 단 Arrow Functions
를 사용할 때는 그러지 않아도 됩니다.
function foo3($arg)
{
return function () use ($arg) {
return $arg;
};
// return fn () => $arg;
}
$func = foo3('Hello, world');
// -> Hello, world
echo $func();
외부로부터 오는 변수들 & 슈퍼 글로벌 변수
PHP 에는 슈퍼 글로벌 변수라 하여 $_SERVER, $GLOBALS, $_SESSION
와 같이 미리 정의되어 있는 글로벌 변수들과 유저로부터 받아온 데이터를 담고 있는 변수들이 있습니다. $_GET, $_POST, $_REQUEST, $_COOKIE
가 있습니다. 예를들어 다음과 같은 폼이 가정해보겠습니다.
<form action="/" method="post">
<input type="text" name="email">
<input type="password" name="password">
</form>
그렇다면 아래의 코드로 값을 받아올 수 있습니다. 여기서 $_POST
는 POST 요청으로 날라온 값들을 담고 있고 이는 배열입니다.
[ 'email' => $email, 'password' => $password ] = $_POST
GET 요청은 $_GET
,쿠키에 대한 정보는 $_COOKIE
, 세션에 대한 정보는 $_SESSION
, 그리고 GET 과 POST 요청을 포함한 정보들은 $_REQUEST
가 가지고 있습니다.
출처: 링크
'PHP > 기초' 카테고리의 다른 글
PHP 연산자 정리 (0) | 2022.06.25 |
---|---|
PHP 상수 정리 (0) | 2022.06.25 |
PHP 자료형 정리 (0) | 2022.06.20 |
PHP 배열(array) 기초 정리 (1) | 2022.06.18 |
PHP include, require 특징 및 차이점 (0) | 2022.06.16 |