정상우
hELLO.
정상우
전체 방문자
384,511
오늘
130
어제
1,174
  • hELLO. (121)
    • 컴퓨터과학 (4)
      • 알고리즘 & 자료구조 (4)
    • 언어 & 프레임워크 (63)
      • Go (23)
      • PHP & Laravel (40)
    • 웹 (7)
    • 블록체인 (12)
      • 메인넷 (9)
      • 암호화폐 플랫폼 (3)
    • 포트폴리오 (10)
    • 칼럼 (20)
      • 에세이 (4)
      • 개발자스럽게 살기 (14)
      • 회고 (2)
    • 티스토리 (5)

블로그 메뉴

  • ⚡ 개발자 이력서
  • 🌟 깃허브
  • 💻 강의
  • ✨ 예제코드
  • ⭐ 브런치
  • 태그 클라우드
  • 방명록

공지사항

  • 2차 도메인을 설정했습니다 ✨

인기 글

  • JWT(JSON Web Token)의 개념부⋯
    2021.07.29
    JWT(JSON Web Token)의 개념부⋯
  • 'REST' 를 보다 'RESTful' 하게⋯
    2021.08.14
    'REST' 를 보다 'RESTful' 하게⋯
  • [Laravel] 라라벨 프레임워크⋯
    2021.06.10
    [Laravel] 라라벨 프레임워크⋯
  • 깃허브를 포트폴리오로 쓰려면⋯
    2021.12.25
    깃허브를 포트폴리오로 쓰려면⋯
  • 암호화폐 트레이딩 봇을 만들었⋯
    2021.05.12
    암호화폐 트레이딩 봇을 만들었⋯

태그

  • php
  • go
  • 블록체인
  • 포트폴리오
  • 개발
  • 라라벨
  • 프로그래머스
  • Algorithm
  • 코딩테스트
  • 개발 리뷰

최근 댓글

  • 고맙습니다 ~^^
    정상우
  • 오늘 블로그 만들었는데 검색하⋯
    엥뿌삐
  • 좋은 스킨 정말 감사드립니다.⋯
    이태홍
  • 고맙습니다 ㅎㅎ
    정상우
  • 제가 원하던 최고의 스킨입니다⋯
    _HEON

최근 글

  • 빠르게 성장하는 개발자의 세⋯
    2022.06.08
    빠르게 성장하는 개발자의 세⋯
  • 개발자와 엔지니어, 그 사이에서
    2022.05.10
    개발자와 엔지니어, 그 사이에서
  • 아임포트(Iamport)로 결제기능⋯
    2022.04.03
    아임포트(Iamport)로 결제기능⋯
  • 아임포트(Iamport)로 결제기능⋯
    2022.04.01
    아임포트(Iamport)로 결제기능⋯
  • [Laravel] 카페24 호스팅에 라⋯
    2022.03.29
    [Laravel] 카페24 호스팅에 라⋯

티스토리

hELLO · Designed By 정상우.
정상우

hELLO.

언어 & 프레임워크/PHP & Laravel

PHP: 변수 (가변 변수, 스코프, 슈퍼 글로벌 변수)

2020. 3. 9. 23:32

변수

변수는 타 언어와 마찬가지로 값을 담을 수 있는 메모리 공간입니다. 객체의 경우에는 메모리의 주소가 저장되어 힙영역에 있는 값을 참조할 것입니다. 그 외에는 일반적인 스택 메모리에 저장이 되겠지요. 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: 상수 (매직상수)

https://www.inflearn.com/course/php7-reboot

https://www.inflearn.com/course/php7-oop

PHP 카테고리 목차 및 문서 정리

2020년, PHP 언어가 가지는 의미

https://www.php.net/manual/en/

    '언어 & 프레임워크/PHP & Laravel' 카테고리의 다른 글
    • PHP: 연산자
    • PHP: 상수 (매직상수)
    • PHP: 자료형
    • PHP: 기본 문법
    $, Here Doc, Now Doc, php, 변수, 스코프
    정상우
    정상우
    과거의 배움으로 현재를 바꾸고 미래를 만듭니다. #25+2살 #INFJ #개발자 #브런치작가
    댓글쓰기
    다음 글
    PHP: 상수 (매직상수)
    이전 글
    PHP: 자료형
    • 이전
    • 1
    • ···
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 다음

    티스토리툴바