정상우
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: 함수 (익명 함수, 화살표 함수, Closure)

2020. 3. 29. 21:19

함수

함수(Functions)라는 개념은 많은 프로그래밍 언어에서 중요합니다. 코드의 중복을 최소화하고 기능 단위로 코드를 구성함으로서 말 그대로 블록처럼 끼워맞춰 어플리케이션을 구성할 수 있도록 해줍니다. 또한 하나를 변경했을 때 다른 곳은 변경하지 않더라도 적용되기때문에 유지보수에 큰 도움을 줍니다.

function

함수의 선언은 function 키워드를 사용하여 다음과 같이 할 수 있습니다. foo 라는 이름을 가진 함수가 정의되었습니다.

function foo()
{
    echo 'Hello, world';
}

이제 함수를 사용하려면 호출을하면 되는데, 대략 세 가지 방법을 소개하고자 합니다.

함수의 이름으로 호출하기

함수의 이름과 함께 소괄호를 사용하여 함수를 호출합니다.

foo(); // -> Hello, world

가변 함수

함수의 이름을 값으로 가진 변수로 함수를 호출합니다.

$fn = 'foo';
$fn(); // -> Hello, world

call_user_func

내장함수인call_user_func 을 사용하여 호출합니다.

call_user_func('foo'); // -> Hello, world

매개 변수

함수는 외부로 부터 값(Aguments)을 받을 수 있습니다. 숫자나 문자와 같은 값들은 복사를 하며, 객체의 경우라면 주소를 복사합니다. 값을 받는 방법은 여러가지입니다.

필수 매개변수

function foo4($arg1, $arg2, $arg3)
{
    var_dump($arg1, $arg2, $arg3);
}

$args = [ 'Hello, world', 'Who are you?', 'Bye' ];

foo4(...$args);

기본 값 설정

기본 값이 설정된 매개변수는 오른쪽에 위치해야 하며, 기본값이 설정된 매개변수보다 필수 매개변수가 먼저 나와야 합니다.

function foo2($arg = 'Hello, world')
{
    echo $arg;
}

foo2(); // -> Hello, world

Rest 매개변수

매개변수가 여러 개 날라올 경우 ... 를 사용하여 배열로 처리할 수 있습니다.

function foo3(...$args)
{
    var_dump($args);
}

foo3('Hello, world', 'Who are you?', 'Bye');

값 반환하기

함수는 값을 반환(Return)할 수 있습니다. return 키워드를 사용합니다. 함수의 기본적인 특징은 값을 받고 반환을 한다는 것입니다. 반환 자료형을 명시해줄 수도 있습니다.

function foo(): string
{
    return 'Hello, world';
}

echo foo(); // -> Hello, world

익명 함수

함수는 값으로써 변수에 담을 수 있습니다. 이는 익명함수(Anonymous)라고 합니다. 일급함수(First Class)입니다.

$foo = function () {
    return 'Hello, world';
};

callable

파라매터로 callable 을 받을 수 있는데, 이는 함수를 파라매터로써 취급할수 있다는 이야기입니다.

function foo(callable $callback)
{
    echo $callback();
}

foo(function () {
    return 'Hello, world';
});

함수 리턴하기

함수가 함수를 리턴할 수도 있습니다. 클로저(Closure)라는 개념을 사용하면 함수 스코프에 있는 값을 보존할 수도 있습니다.

function foo2()
{
    return function () {
        return 'Hello, world';
    };
}

$func = foo2();
echo $func(); // -> Hello, world

변수와 상수 스코프

변수

함수에서 변수에 대한 스코프는 PHP: 변수를 참고해주세요.

상수

함수에서 상수에 대한 스코프는 PHP: 상수를 참고해주세요.

화살표 함수

화살표 함수(Arrow Functions)는 PHP 7.4에서 등장했습니다. 드디어 나타났군요. fn 키워드로 정의할 수 있으며, function 키워드와의 차이점은, 화살표 함수는 멀티 라인으로 사용할 수 없으며, return, use 와 같은 키워드를 사용하지 않아도 된다는 것입니다.

$message = 'Hello, world';
$foo = fn () => $message;

echo $foo(); //-> Hello, world

Closure

화살표 함수와 익명 함수는 Closure 의 객체입니다. Closure 는 내장 클래스로서 사용합니다. 위에서 언급한 클로저와는 다른 개념입니다. 먼저 기존의 함수로부터 클로저를 생성할 수도 있습니다.

익명함수와 화살표 함수

$foo = function () {
    return 'Hello, world';
};
// $foo = fn () => 'Hello, world';

echo call_user_func($foo); // -> Hello, world

메서드

Closure::fromCallable(callable)

function foo()
{
}

$foo = Closure::fromCallable('foo');
call_user_func($foo);

Closure::call(object [, mixed])

첫번째 파라매터로 $this 를 지정하여 호출할 수 있습니다.

class A
{
    private $message = 'Hello, world';
}

$foo = fn () => $this->message;
echo $foo->call(new A()); // -> Hello, world

Closure::bindTo(object [, mixed])

Closure::bindTo 메서드의 두 번째 파라매터에 스코프를 지정해주지 않으면 private 프로퍼티 및 메서드에 접근할 수 없습니다.

$a = new A();
echo call_user_func($foo->bindTo($a, $a)); // -> Hello, world

Closure::bind(Closure, object [, mixed])

Closure::bind 메서드는 정적 메서드로써 사용합니다 사용법은 비슷하죠.

echo call_user_func(Closure::bind($foo, $a, $a)); // -> Hello, world

더 읽을거리

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: Static (정적 변수, 정적 메서드, 늦은 정적 바인딩)
    • PHP: 클래스 (상속, 문맥, 익명 클래스)
    • PHP: 파일 분할 (include, require)
    • PHP: 반복문 (for, while)
    Closure, php, 익명 함수, 함수, 화살표 함수
    정상우
    정상우
    과거의 배움으로 현재를 바꾸고 미래를 만듭니다. #25+2살 #INFJ #개발자 #브런치작가
    댓글쓰기
    1. 익명
      2020.10.09 21:12
      비밀댓글입니다
      수정/삭제댓글쓰기댓글보기
      1. 익명
        2020.10.09 23:30
        비밀댓글입니다
        수정/삭제
    다음 글
    티스토리 스킨 프레임워크를 만들었습니다 (aka. 티도리)
    이전 글
    PHP: 파일 분할 (include, require)
    • 이전
    • 1
    • ···
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • ···
    • 121
    • 다음

    티스토리툴바