정상우
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: declare

2020. 11. 13. 21:47

Declare

declare 는 언어구조이며 특정 지시어를 코드 블록에서 실행하기 위해 사용한다. 이 기능은 나도 거의 사용한 적 없지만, 가끔 본적이 있어서 적어보기로 했다. 기본적으로 지원하는 지시어는 총 세가지이며, ticks, encoding, strict_types 정도가 있다. 여기서 제일 중요도가 높다고 여겨지는 것은 아무래도 strict_types 지시어라고 볼 수 있는데, 이것을 사용하면 코드가 조금 더 단단해지기 때문이다.

ticks

PHP 코드 분석기가 코드를 해석할 때 로우 레벨에서 틱을 발생시킬 수 있는 구문에 대해 이벤트를 발생시키는데, 그것이 tick 이라고 볼 수 있다. 틱은 시스템 명령어가 아니라 실제 코드 상의 명령어에 따라 발생하므로 실제 코드에서 명령이 얼마나 일어날지 측정할 수 있다. 지시는 다음과 같이 할 수 있다.

declare(ticks=1);

틱은 이벤트이기 때문에 이를 담당하는 이벤트 핸들러를 등록할 수 있는데, 다음과 같이 할 수 있다. 현재 ticks=1 로 배정되어 있어서 한 번의 틱이 발생할 때마다 핸들러가 호출되겠지만, ticks=2 로 변경하면 두 번의 틱마다 핸들러를 발생시킨다.

function tick_handler()
{
}

register_tick_function('tick_handler');

아래의 코드는 틱을 이야기 하면서도 declare 언어구조를 사용할 때 다른 방식으로도 사용할 수 있음을 보여준다. 아래의 코드에서 틱 핸들러는 총 101번 호출될 것이며, $_ 구문을 읽은 다음과 for 문이 끝났을 때다.

declare(ticks=1) {
    foreach (range(1, 100) as $_) { $_; }
}

encoding

encoding 지시어는 스크립트의 인코딩을 설정할 수 있다. 이는 php.ini 에서 zend.script_encoding 을 통해 설정할 수도 있다만, 현재는 거의 사용되지 않는다.

declare(encoding='ISO-8859-1');

strict_types

이 지시어는 상당히 중요하다. 타입 체킹을 조금더 엄격하게 수행할 수 있게 되니까 말이다.

declare(strict_types=1);

예를 들어 아래와 같은 코드가 있을 때, foo() 함수는 string 타입이라고 해도 int 를 받을 수 있다. 이는 런타임과 컴파일에서 에러를 뱉지 않는다.

function foo(string $message)
{
}

foo(100);

그러나 strict_types 지시어가 되어있다면 위의 코드는 아래와 같은 에러를 뱉는다.

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to foo() must be of the type string, int given, called in ...

타입을 선언했다는 이야기는 타입을 지키라고 개발자가 의도하여 작성하는 것인데, 정작 strict_types 지시어를 쓰지 않으면 그것이 지켜지지 않을 수도 있다는 것은 상당히 놀라운 일이다. strict_types 는 기본으로 적용되도록 바뀌었으면 좋겠다. 개발자가 타입을 명시하는 것을 무용지물로 만들어서야 되겠는가.

더 읽을거리

PHP: 함수 (익명 함수, 화살표 함수, Closure)

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' 카테고리의 다른 글
    • [Laravel] 라라벨 프레임워크 시작하기
    • PHP 언어를 공부하기 위한 자료 및 문서 정리
    • PHP: Interpreter, OPCache, ― JIT
    • PHP: Thread Safe vs Non Thread Safe
    declare, encoding, php, strict_types, Tick
    정상우
    정상우
    과거의 배움으로 현재를 바꾸고 미래를 만듭니다. #25+2살 #INFJ #개발자 #브런치작가
    댓글쓰기
    다음 글
    PHP 언어를 공부하기 위한 자료 및 문서 정리
    이전 글
    PHP: Interpreter, OPCache, ― JIT
    • 이전
    • 1
    • ···
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • ···
    • 40
    • 다음

    티스토리툴바