사용자 선언 함수

다음과 같은 문법으로 함수를 선언할 수 있습니다:

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 ($makefoofoo();

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에서 재귀 함수 호출을 할 수 있습니다.

Example #4 재귀 함수

<?php
function recursion($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursion($a 1);
    }
}
?>

Note: 100-200 재귀 레벨을 어서는 함수/메소드 호출을 피하십시오. 스택 한계에 도달하여 현재 크립트가 중단될 수 있습니다. 특히, 무한재귀호출은 프로그래밍 오류로 간주합니다.

add a note add a note

User Contributed Notes 1 note

up
-8
anisgazig at gmail dot com
2 years ago
<?php

//variable-length argument list with variable number arguments & default arguments.

function myName1($b,...$a){
print_r($a);//Array ( [0] => Bar [1] => Baz )
echo "<br>";
echo
$b;//Foo

}

$x = "Foo";
$y = "Bar";
$z = "Baz";
myName1($x,$y,$z);
echo
"<br>";

function
myName2($b="John",...$a){
print_r($a);//Array ( [0] => Bar [1] => Baz )
echo "<br>";
echo
$b;//Foo

}

$x = "Foo";
$y = "Bar";
$z = "Baz";
myName2($x,$y,$z);
echo
"<br>";

?>
To Top