함수
사용자 함수 선언
함수는 다음과 같이 선언을 합니다.
<?php
function 함수명 ($인자1,$인자2,$인자3 ... )
{
echo "나는 함수다!!!";
return 되돌려줄값 ;
}
?>
함수명은 변수명과 같은 식별자를 사용합니다.
인자는 함수 호출시에 함수 내부에 전해줄 값입니다.
앞서 제어구조에서 배웠듯이 return을 통해 수행결과를 되돌려 줄 수 있습니다.
조건부 함수 선언
<?php
$use = true;
bar();
//참인 경우에만 함수가 선언됩니다.
//여기까지는 아직 함수가 선언되지 않았습니다.
if ($use) {
function foo () { echo "조건부 함수"; }
}
//이제 함수가 선언되었으니 호출해 볼까요?
foo();
function bar()
{
echo "호출부분 아래에 함수가 정의되어도 괜찮아요~";
}
?>
위 소스에서 두가지를 알 수 있습니다.
한가지는 함수 선언이 나중에 되어 있어도 호출이 가능하다.
또 한가지는 조건적으로 함수를 선언할 수 있다.
만약 $use 가 false 이거나 선언전에 호출을 한다면 함수가 정의되지 않았다는
심각한 에러를 맛보게 될 것입니다.
함수안의 함수 선언
<?php
function foo()
{
function bar()
{
echo "foo()를 호출하기 전까지는 존재하지 않습니다.\n";
}
}
// bar() 함수가 아직 존재하지 않기때문에 bar 함수를 호출할 수 없습니다.
foo();
// foo() 함수를 실행함으로 해서 bar() 함수가 선언이 되었습니다.
// 이제 bar() 함수를 사용할 수 있습니다.
bar();
?>
이 소스는 참 재미나는 군요.
함수안에 함수를 정의하여, 함수가 호출되기 전까지는 사용이 불가능합니다.
함수가 호출이 되고 나면 함수안의 함수가 선언되어지고 그 이후부터 사용이 가능하게 됩니다.
함수에 인자 넘겨주기
PHP에서 함수에 인자를 넘겨주는 세가지 방법이 있습니다.
기본적으로 값에 의한 전달, 참조에 의한 전달, 기본 인자값. 이 세가지입니다.
값에 의한 전달 (passing by value)
$args = 1;
test_function($args);
test_function(1);`
위와 같이 변수를 통해 값을 전달하거나 직접적으로 값을 전달하는 방법이 "값에 의한 전달"입니다.
이 방법을 통해 배열도 전달이 가능합니다.
참고 (중급).
배열을 인자를 통해 전달하는 것은 엄연히 따지면 값에 의한 전달이 아닙니다.
그러나 PHP에는 포인터 개념이 없으므로 그저 값에 의한 전달에 보셔도 상관없습니다.
참조에 의한 전달 (passing by reference)
<?php
function add_str (&$string)
{
$string .= 'PHP 따라잡기';
}
$str = '다우니와 함께하는 ';
add_str($str);
echo $str;
?>
참조를 통해 전달받은 변수는 수정하면 원래 변수까지 영향을 미치게 됩니다.
그래서 $str 변수를 출력했음에도 $string 변수가 출력되어 집니다.
실제로 $str 과 $string 은 이름만 다를뿐 같은 변수입니다.
기본 인자값
<?php
function ezphp_net($url = "http://ezphp.net")
{
return "홈페이지 주소 : $url<BR>";
}
echo ezphp_net();
echo ezphp_net("http://www.ezphp.net");
?>
함수 인자에 기본값을 설정해 놓은 것입니다.
값이 전달되지 않았을 때 기본값을 그 값으로 이용하는 것이죠.
결과는 다음과 같습니다.
홈페이지 주소 : http://ezphp.net
홈페이지 주소 : http://www.ezphp.net
이 기본 인자값을 설정할 때 유의해야 할 점이 있습니다.
인자가 여러개일 때 기본인자값을 설정할 인자를 제일 마지막에 두어야 한다는 것입니다.
만약 처음 인자에 기본값을 지정한다면 역시~ 에러를 맛보게 될 것입니다. ㅋㅋㅋ
결과 되돌려 주기
return을 이용하여 값을 되돌려주거나 참조를 되돌려 줄 수 있습니다.
값을 되돌려 주기
<?php
function square ($num)
{
return $num * $num;
}
echo square(4);
?>
제곱을 하는 함수입니다. 제곱을 한 결과를 값(16)으로 되돌려줍니다.
<?php
function numbers()
{
return array (0, 1, 2);
}
?>
위와 같이 배열을 되돌려 줄 수도 있습니다.
- 참조를 되돌려 주기
<?php
function &returns_reference()
{
return $someref;
}
$newref =& returns_reference();
?>
참조를 되돌려 줄 때는 반드시 함수명앞에 & 기호를 표시해야 합니다.
이는 함수의 되돌림값이 참조라는 것을 명시하기 위함입니다.