PHP - 함수 전달: 초보자 가이드

안녕하세요, PHP 개발자 지망생 여러분! 오늘 우리는 PHP에서 함수를 전달하는 세계에 흥미로운 여정을 떠납니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 저는 당신의 친절한 안내자로, 많은 예제를 통해 단계별로 설명해드릴 것입니다. 그럼 시작해보겠습니다!

PHP - Passing Functions

Callable Functions은 무엇인가요?

시작하기 전에, " 함수 전달 "이 무엇을 의미하는지 이해해보겠습니다. PHP에서 함수는 데이터로 취급될 수 있어, 다른 함수에 인자로 전달할 수 있습니다. 이러한 전달 가능한 함수는 종종 "callable" 또는 "callbacks"라고 불립니다.

마법의 상자( 함수 )가 지시( 다른 함수 )를 넣으면 다른 기술을 할 수 있다고 상상해보세요. 그것이 바로 함수를 전달할 때 하는 일입니다!

array_map(): 쉽게 배열을 변환하다

array_map()를 사용하여 콜백을 전달하는 가장 흔히 사용되는 함수 중 하나로 시작해보겠습니다.

array_map()는 무엇을 하나요?

array_map()는 콜백 함수를 배열의 각 요소에 적용하고 결과로 새로운 배열을 반환합니다.

예제 1: 숫자 두 배 만들기

$numbers = [1, 2, 3, 4, 5];

$doubled = array_map(function($n) {
return $n * 2;
}, $numbers);

print_r($doubled);

출력:

Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)

이 예제에서 우리는 익명 함수( 콜렉션 이라고도 합니다)를 array_map()에 전달하고 있습니다. 이 함수는 각 숫자를 2배로 만듭니다. 결과는 모든 숫자가 두 배된 새로운 배열입니다.

예제 2: 이름을 대문자로 변환하기

$names = ['alice', 'bob', 'charlie'];

$capitalized = array_map('ucfirst', $names);

print_r($capitalized);

출력:

Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)

여기서 우리는 내장된 PHP 함수 ucfirst를 문자열로 전달하고 있습니다. array_map()는 이 함수를 각 이름에 적용하여 첫 글자를 대문자로 변환합니다.

call_user_func(): 함수 호출의 스위스 아ーノ이

call_user_func()는 어떤 콜러블 함수나 메서드를 호출할 수 있는 다재다능한 함수입니다.

예제 3: 간단한 함수 호출

function greet($name) {
return "Hello, $name!";
}

$result = call_user_func('greet', 'World');
echo $result;  // 출력: Hello, World!

이 예제에서 우리는 함수 이름('greet')을 문자열로 전달하고 그 인자를 따릅니다.

예제 4: 오브젝트의 메서드 호출

class Greeter {
public function sayHi($name) {
return "Hi, $name!";
}
}

$greeter = new Greeter();
$result = call_user_func([$greeter, 'sayHi'], 'PHP');
echo $result;  // 출력: Hi, PHP!

여기서 우리는 오브젝트의 메서드를 호출하고 있습니다. 오브젝트와 메서드 이름을 포함한 배열을 전달하고 그 인자를 따릅니다.

usort(): 콜백을 사용한 커스텀 정렬

usort()는 커스텀 비교 함수를 사용하여 배열을 정렬할 수 있는 강력한 함수입니다.

예제 5: 오브젝트 배열 정렬

class Person {
public $name;
public $age;

public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}

$people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35)
];

usort($people, function($a, $b) {
return $a->age - $b->age;
});

foreach ($people as $person) {
echo "{$person->name}: {$person->age}\n";
}

출력:

Bob: 25
Alice: 30
Charlie: 35

이 예제에서 우리는 Person 오브젝트 배열을 나이로 정렬하고 있습니다. 콜백 함수는 두 사람의 나이를 비교하고 음수, 0, 양수 값을 반환하여 순서를 결정합니다.

콜백을 사용한 사용자 정의 함수

이제 PHP의 내장 함수가 콜백을 사용하는 방법을 보았으니, 우리 자신의 함수를 만들어 콜백을 받아보겠습니다.

예제 6: 커스텀 맵 함수 만들기

function myMap($array, $callback) {
$result = [];
foreach ($array as $item) {
$result[] = $callback($item);
}
return $result;
}

$numbers = [1, 2, 3, 4, 5];

$squared = myMap($numbers, function($n) {
return $n * $n;
});

print_r($squared);

출력:

Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
)

이 예제에서 우리는 자신의 myMap 함수를 만들었습니다. 이 함수는 array_map과 비슷하게 동작하며, 배열과 콜백 함수를 받아 각 요소에 콜백을 적용하고 결과로 새로운 배열을 반환합니다.

결론

축하합니다! PHP에서 함수를 전달하는 세계로 첫 걸음을 뗐습니다. 우리는 array_map(), call_user_func(), usort(), 그리고 콜백을 받는 우리 자신의 함수를 만드는 방법을 다루었습니다.

기억하세요, 함수를 전달하는 것은 더 유연하고 재사용 가능한 코드를 작성하는 강력한 기술입니다. 그것은 코드 도구 상자에서 다재다능하고 언제나 다양한 작업을 처리할 준비가 되어 있는 스위스 아ーノ이와 같습니다!

PHP 여정을 계속하면서, 이 기술을 사용할 더 많은 기회를 발견할 것입니다. 계속 연습하고, 곧 프로처럼 함수를 전달할 수 있을 것입니다!

여기서 다루었던 함수의 빠른 참조 표입니다:

함수 설명 예제 사용 사례
array_map() 배열의 모든 요소에 콜백을 적용 배열 요소 변환
call_user_func() 콜백을 인자로 호출 동적으로 함수나 메서드 호출
usort() 커스텀 비교 함수를 사용하여 배열 정렬 배열의 커스텀 정렬

happy coding, 그리고 기억하세요 - PHP에서 함수는 당신의 친구입니다!

Credits: Image by storyset