PHP/포스팅

[PHP] 함수의 매개변수

짜집퍼박사(짜박) 2024. 12. 1. 19:17

PHP에서 함수의 매개변수(Parameter)는 함수에 전달되는 값을 처리하는 데 사용됩니다. 매개변수를 사용하면 함수의 동작을 동적으로 변경할 수 있습니다. PHP 함수의 매개변수에는 다양한 옵션과 기능이 포함되어 있습니다.

 

1. 기본 매개변수

PHP 함수는 매개변수를 통해 값을 받을 수 있습니다.
매개변수는 함수 선언부에서 정의되며, 함수 호출 시 해당 값이 전달됩니다.

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

greet("John"); // 출력: Hello, John!

 

2. 기본값 설정 (Default Parameters)

함수의 매개변수에 기본값을 설정하면 호출 시 값을 전달하지 않아도 됩니다. 기본값이 설정된 매개변수는 함수 호출 시 값이 제공되지 않을 경우 사용할 값을 정의합니다.

function greet($name = "Guest") {
    echo "Hello, $name!";
}

greet(); // 출력: Hello, Guest!
greet("John"); // 출력: Hello, John!

규칙

1. 기본값이 설정된 매개변수는 반드시 뒤쪽에 위치해야 합니다.

function example($a = 1, $b) { } // 오류 발생!

2. 기본값은 상수, 배열, null 등의 값을 사용할 수 있습니다.

 

3. 다중 매개변수 (Multiple Parameters)

PHP 함수는 여러 개의 매개변수를 가질 수 있습니다.

function add($a, $b) {
    return $a + $b;
}

echo add(3, 5); // 출력: 8

 

4. 가변 매개변수 (Variable-length Arguments)

PHP에서는 함수가 받을 매개변수의 개수를 고정하지 않고 가변적으로 설정할 수 있습니다. 이를 위해 **... (스프레드 연산자)**를 사용합니다.

function sum(...$numbers) {
    return array_sum($numbers);
}

echo sum(1, 2, 3, 4); // 출력: 10

동작 방식

1. **...$numbers**는 함수 호출 시 전달된 모든 값을 배열로 변환합니다.

2. 매개변수 리스트에서 ...는 마지막에만 사용 가능합니다.

function mix($a, $b, ...$others) {
    print_r($others);
}

mix(1, 2, 3, 4, 5); 
// 출력: Array ( [0] => 3 [1] => 4 [2] => 5 )

 

5. 타입 선언 (Type Hinting)

PHP 7.0부터 함수 매개변수에 타입 선언(Type Hinting)을 사용할 수 있습니다. 이는 함수가 특정 타입의 값을 받을 것을 명시합니다.

 

지원 타입

1. 스칼라 타입: int, float, string, bool

2. 객체 타입: 특정 클래스나 인터페이스

3. 배열 타입: array

4. 콜러블 타입: callable

5. 혼합 타입 (PHP 8.0+): mixed

// 스칼라 타입
function calculateArea(int $width, int $height): int {
    return $width * $height;
}

echo calculateArea(5, 10); // 출력: 50

주의

- PHP는 기본적으로 느슨한 타입 체크를 하지만, 타입 선언이 추가되면 엄격한 타입 체크를 수행합니다.

- PHP 7.4부터 **?**를 사용하여 nullable 타입을 선언할 수 있습니다.

function greet(?string $name) {
    echo "Hello, " . ($name ?? "Guest");
}

greet(null); // 출력: Hello, Guest

 

6. 값에 의한 전달 (Pass by Value)

PHP의 기본 매개변수 전달 방식은 값에 의한 전달입니다. 함수가 호출될 때 매개변수의 복사본이 생성되며, 원래 변수는 함수의 영향을 받지 않습니다.

function increment($value) {
    $value++;
}

$num = 10;
increment($num);
echo $num; // 출력: 10 (원래 값은 변경되지 않음)

 

7. 참조에 의한 전달 (Pass by Reference)

& 연산자를 사용하여 매개변수를 참조로 전달하면 함수가 원래 변수에 직접 접근합니다.

function increment(&$value) {
    $value++;
}

$num = 10;
increment($num);
echo $num; // 출력: 11 (원래 값이 변경됨)

사용 시 주의

-  참조를 사용하는 경우 원래 변수의 값을 변경할 위험이 있으므로 주의해야 합니다.

-  참조를 반환하는 함수와 혼동하지 않도록 해야 합니다.

 

8. 매개변수와 배열

PHP 함수는 배열을 매개변수로 받을 수 있습니다.

function printArray(array $arr) {
    foreach ($arr as $item) {
        echo $item . " ";
    }
}

printArray([1, 2, 3]); // 출력: 1 2 3

 

9. 익명 함수의 매개변수

익명 함수(클로저)도 매개변수를 정의할 수 있습니다.

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

echo $greet("John"); // 출력: Hello, John!

 

10. 콜백 함수와 매개변수

콜백 함수는 다른 함수의 매개변수로 전달되어 실행될 수 있습니다.

function processData(array $data, callable $callback) {
    foreach ($data as $item) {
        echo $callback($item) . " ";
    }
}

processData([1, 2, 3], function($n) {
    return $n * 2;
});
// 출력: 2 4 6

 

11. PHP 8.0 - 이름 있는 인자 (Named Arguments)

PHP 8.0부터 함수 호출 시 매개변수 이름을 지정하여 값을 전달할 수 있습니다.

function greet($name, $greeting = "Hello") {
    echo "$greeting, $name!";
}

greet(name: "John", greeting: "Hi"); // 출력: Hi, John!

장점

- 매개변수 순서와 상관없이 값을 전달 가능.

- 가독성 향상.

 

12. 가변 매개변수와 스프레드 연산자 (...)

PHP 8.0에서는 함수 호출 시 배열을 스프레드 연산자로 풀어서 전달할 수 있습니다.

function sum($a, $b, $c) {
    return $a + $b + $c;
}

$args = [1, 2, 3];
echo sum(...$args); // 출력: 6

 

요약

- 매개변수는 함수의 동적 동작을 정의하며, 기본값, 참조, 가변 길이, 타입 선언 등을 통해 다양하게 활용할 수 있습니다.

- 최신 PHP 기능(PHP 7.0+, 8.0+)을 활용하면 함수 정의와 호출이 더욱 간결하고 강력해집니다.

 

With ChatGPT

'PHP > 포스팅' 카테고리의 다른 글

[PHP] GET 방식 폼 양식의 데이터 처리  (0) 2024.12.26
[PHP] POST 방식 폼 양식의 데이터 처리  (0) 2024.12.25
[PHP] 재귀 함수  (0) 2024.12.01
[PHP] [함수] 클로저(Closure)  (0) 2024.12.01
[PHP] 익명 함수  (0) 2024.12.01