사용자 정의 함수
함수는 다음과 같은 구문을 사용하여 정의할 수 있습니다.
예제 #1 함수 사용을 보여주기 위한 의사 코드
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Example function.\n";
return $retval;
}
?>
유효한 PHP 코드는 다른 함수 및 클래스 정의를 포함하여 함수 내부에 나타날 수 있습니다.
함수 이름은 PHP의 다른 레이블과 동일한 규칙을 따릅니다. 유효한 함수 이름은 문자 또는 밑줄로 시작하고 그 뒤에 임의의 수의 문자, 숫자 또는 밑줄이 옵니다. 정규식으로 다음과 같이 표현됩니다. ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
.
팁 Userland Naming Guide도 참조하십시오.
함수가 아래 두 가지 예와 같이 조건부로 정의된 경우를 제외하고는 참조되기 전에 함수를 정의할 필요가 없습니다.
표시된 두 가지 예와 같이 함수가 조건부 방식으로 정의된 경우. 해당 정의는 호출되기 전에 처리되어야 합니다.
예제 #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";
}
?>
예제 #3 함수 내의 함수
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.\n";
}
}
/* We can't call bar() yet
since it doesn't exist. */
foo();
/* Now we can call bar(),
foo()'s processing has
made it accessible. */
bar();
?>
PHP의 모든 함수와 클래스에는 전역 범위가 있습니다. 함수 내부에서 정의된 경우에도 함수 외부에서 호출할 수 있으며 그 반대의 경우도 마찬가지입니다.
PHP는 함수 오버로딩을 지원하지 않으며 이전에 선언된 함수의 정의를 취소하거나 재정의하는 것도 불가능합니다.
참고: 함수 이름은 ASCII 문자 A~Z에 대해 대소문자를 구분하지 않지만 일반적으로 선언에 표시된 대로 함수를 호출하는 것이 좋은 형식입니다.
가변 개수의 인수와 기본 인수가 모두 함수에서 지원됩니다. 자세한 내용은 func_num_args(), func_get_arg() 및 func_get_args()에 대한 함수 참조도 참조하십시오.
PHP에서 재귀 함수를 호출하는 것이 가능합니다.
예제 #4 재귀 함수
<?php
function recursion($a)
{
if ($a < 20) {
echo "$a\n";
recursion($a + 1);
}
}
?>
참고: 100-200개 이상의 재귀 수준이 있는 재귀 함수/메서드 호출은 스택을 깨고 현재 스크립트를 종료할 수 있습니다. 특히, 무한 재귀는 프로그래밍 오류로 간주됩니다.