함수

함수 규칙

  1. 함수의 이름은 문자와 숫자, 언더스코어(_)만 사용할 수 있습니다.

  2. 함수의 이름은 숫자로 시작할 수 없습니다.

  3. 여러 함수가 같은 이름을 사용할 수는 없습니다.

  • PHP에서 함수 이름은 대소문자를 구별하지 않지만, 선언한 그대로 호출하는 것이 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare(strict_types = 1);   // strict 모드로 설정함.

 

function sum($x, $y) : float // 반환값의 타입을 float 타입으로 설정함.

{
    return $x + $y;
}

...

① var_dump(sum(3 + 4));   // 오류가 발생함.

② var_dump(sum(3 + 4.5)); // float

위의 예제처럼 declare 문을 사용하여 strict 모드를 설정 가능

PHP 7부터 제공되는 strict 모드는 지금까지의 자동 변환으로 느슨하게 처리되던 타입 검사를 엄격하게 수행하도록 변경

strict 모드에서는 해당 위치에 나올 수 있는 적절한 타입 이외의 값이 나올 경우 타입 변환을 하지 않고 오류를 발생

파라미터

1. 값 전달 방식(passing by value)

  • 함수 안에서 변경되어도 함수 밖의 원본 데이터에는 영향을 주지 않습니다.
1
2
3
4
5
6
function increment($para)
{
    $para++; // $value의 값을 복사하여 increment() 함수에 인수로 전달함.
}
$value = 1;
increment($value);

2.참조 전달(passing by reference)

  • 함수 내부에서 값을 변경하면, 함수 밖의 원본 데이터도 같이 바뀌게 된다.
1
2
3
4
5
6
function increment(&$para) // 인수로 전달되는 값의 원본을 참조함.
{
    $para++;
}
$value = 1;
increment($value);

&을 붙여 사용하면 된다.

3.디폴트 매개변수

파라미터가 전달 받지 못하게 되는 경우 사용되는 변수의 값

1
2
3
4
5
6
7
8
9
10
function sum($value1, $value2 = 0, $value3 = 0)
{
    return $value1 + $value2 + $value3;
}

echo sum(1, 2, 3); // 6
echo sum(1, 2);    // 3
echo sum(1);       // 1

//echo sum();      // 오류가 발생함.

4.가변 길이 인수 목록

함수를 선언할 때 전달받을 인수의 개수를 미리 정하지 않고, 호출할 때마다 유동적으로 인수를 넘기는 기능

1
2
3
4
5
6
7
8
9
function sum(...$num) // PHP 5.6 이상

{
    $sum = 0;
    foreach($num as $n) {
        $sum += $n;
    }
    return $sum;
}

조건적 함수

특정 조건이 되면 선언되는 함수

1
2
3
4
5
6
7
8
9
10
11
$makefunc = true;
//func(); // 이 부분은 func() 함수가 선언되기 전이므로, 함수를 호출할 수 없습니다.

if($makefunc) {
    function func()
    {
        echo "이제 함수를 사용할 수 있습니다";
    }

    func(); // 이 부분은 func() 함수가 선언되었으므로, 함수를 호출할 수 있습니다.
}

함수안의 함수(function within function)

PHP에서 모든 함수는 전역 함수이므로, 함수 내부에서 선언된 함수라도 해당 함수 외부에서 호출할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
function out()
{
    function in()
    {
        echo "이제 함수를 사용할 수 있습니다";
    }
}

① //in(); // 이 부분은 in() 함수가 선언되기 전이므로, 함수를 호출할 수 없습니다.
② out();

③ in();   // 이 부분은 in() 함수가 선언되었으므로, 함수를 호출할 수 있습니다.

재귀 함수(recursive function)

재귀 호출을 중단하도록 조건이 변경될 명령문을 반드시 포함

1
2
3
4
5
6
7
8
function factorial($num)
{
    if($num > 1)                           // 1이 될 때까지
        return $num * factorial($num - 1); // 1씩 감소시킨 값을 전달하여 자기 자신을 계속 호출함.
    else
        return 1;
}
echo factorial(4);

가변 함수(variable function)

PHP에서는 변수 이름에 괄호(())를 붙이면, 해당 변수의 값과 같은 이름을 가지는 함수를 호출

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function first()

{
    echo "first() 함수입니다.<br><br>";
}
function second($para)

{
    echo "second() 함수입니다.<br>";

    echo "함수 호출 시 전달받은 인수의 값은 {$para}입니다.";
}
$func = "first";
$func();    // first() 함수를 호출함.
$func = "second"
$func(20);  // second() 함수를 호출함.