다음과 같은 문법을 사용하여 함수를 선언한다:
Example #1 함수 사용을 설명하기 위한 가상 코드
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "예제 함수.\n";
return $retval;
}
?>
모든 유효 PHP코드는 특정 함수 내에서 뿐만 아니라, 여러 다른 함수나 class정의 안에서도 나타날수있다.
함수 이름은 PHP의 다른 라벨과 같은 규칙을 따릅니다. 유효한 함수 이름은 문자나 _로 시작하고, 여러 개의 문자, 숫자, _가 붙습니다. 정규 표현식으로는 다음과 같이 표현됩니다: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.
함수는 아래 두 예제처럼 조건적으로 정의할 경우를 제외하고, 참조하기 전에 정의할 필요는 없습니다.
아래 예제 코드와 같이 함수가 조건적으로 선언되면 그 함수가 호출되기 전에 함수를 선언해야 한다.
Example #2 조건적인 함수
<?php
$makefoo = true;
/* We can't call foo() from here
since it doesn't exist yet,
but we can call bar() */
bar();
if ($makefoo) {
function foo()
{
echo "I don't exist until program execution reaches me.\n";
}
}
/* Now we can safely call foo()
since $makefoo evaluated to true */
if ($makefoo) foo();
function bar()
{
echo "I exist immediately upon program start.\n";
}
?>
Example #3 함수 안의 함수
<?php
function foo()
{
function bar()
{
echo "foo()를 호출하기 전까지는 존재하지 않습니다.\n";
}
}
/* bar()를 호출할 수 없습니다.
아직 존재하지 않습니다. */
foo();
/* 이제 bar()를 호출할 수
있습니다. foo()를 실행하여
접근할 수 있게 되었습니다. */
bar();
?>
PHP의 모든 함수와 클래스는 전역입니다 - 함수가 내부에서 정의되었더라도 외부에서 호출할 수 있으며, 반대도 성립합니다.
PHP는 함수 오버로딩(overloading)을 지원하지 않으며, 함수 정의를 해제하거나 이미 선언된 함수를 다시 선언할수 없다.
Note: 함수명은 선언시에 그 함수를 호출하기 편하게 만들겠지만, 대소문자 구별을 하지 않는다.
함수에서 가변 길이 인수 목록과 인수 기본값을 지원합니다. 자세한 정보는 func_num_args(), func_get_arg(), func_get_args() 함수 레퍼런스를 참고하십시오.
PHP에서 재귀 함수 호출을 할 수 있습니다. 그러나 100-200 재귀 레벨을 넘어서는 함수/메쏘드 호출을 피하십시오. 스택 한계에 도달하여 현재 스크립트가 중단됩니다.
Example #4 재귀 함수
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>