함수
함수(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 > 기초' 카테고리의 다른 글
PHP 연산자 정리 (0) | 2022.06.25 |
---|---|
PHP 상수 정리 (0) | 2022.06.25 |
PHP 변수 정리 (0) | 2022.06.25 |
PHP 자료형 정리 (0) | 2022.06.20 |
PHP 배열(array) 기초 정리 (1) | 2022.06.18 |