Functions
로빈아빠
본문
User-defined functions
함수는 다음과 같이 정의한다. :
1
2 function foo ($arg_1, $arg_2, ..., $arg_n) {
3 echo "Example function.\n";
4 return $retval;
5 }
6
함수 안에는 다른 함수나 class의 선언 등을 포함한 모든 가능한 PHP 코드가 사용될 수 있다.
PHP3에서는 함수는 그 함수가 사용되기 이전에 선언되어 있어야 하였으나 PHP4에서는 이런 제약이 없어졌다.
PHP는 function overloading을 지원하지 않고, 이미 정의된 함수를 재정의하거나 없애지 못한다.
PHP3에서는 함수 파라메터의 기본값을 설정해주는 것(default argument values를 보자.)은 가능해도, 파라메터의 개수를 가변으로 설정하는 것은 불가능했지만, PHP4는 두가지 모두 가능하다. 자세한 내용은 Variable-length argument lists 와 func_num_args(), func_get_arg(), func_get_args() 의 함수 설명을 보기 바란다.
--------------------------------------------------------------------------------
Function arguments
argument list를 통해 함수에 어떤 정보를 넘겨줄 수 있다. 이 argument list는 쉼표(,)로 나위어진 변수나 상수의 list이다.
PHP는 passing by value(기본적으로 이것을 사용)와 passing by reference, default argument values의 3가지 방법을 제공한다. 가변 길이(Variable-length) argument list는 PHP4이후에서만 제공된다. 자세한 내용은 Variable-length argument lists 와 func_num_args(), func_get_arg(), func_get_args() 의 함수 설명을 보기 바란다. 그러나 PHP3에서도 배열을 통한 전달을 사용한다면 비슷한 효과를 낼 수 있다.
1
2 function takes_array($input) {
3 echo "$input[0] + $input[1] = ", $input[0]+$input[1];
4 }
5
-------------------------------------------------------------------------------
Making arguments be passed by reference
기본적으로 함수의 인수(argument)들은 값으로 전달된다(passed by value). 함수내에서 변화시킨 값을 그대로 유지하려면 pass by reference로 인수를 넘겨야 한다.
여러분이 어떤 함수의 인수를 항상 pass by reference로 넘기려 한다면, 여러분은 함수를 선언할 때 ampersand(&)를 인수의 앞에 붙여주면 된다. :
1
2 function add_some_extra(&$string) {
3 $string .= 'and something extra.';
4 }
5 $str = 'This is a string, ';
6 add_some_extra($str);
7 echo $str; // outputs 'This is a string, and something extra.'
8
만약 기본은 by value 로 하지만 필요에 따라 by reference로 호출하고 싶다면 함수 호출 시에 인수의 앞에 &를 붙이면 된다. :
1
2 function foo ($bar) {
3 $bar .= ' and something extra.';
4 }
5 $str = 'This is a string, ';
6 foo ($str);
7 echo $str; // outputs 'This is a string, '
8 foo (&$str);
9 echo $str; // outputs 'This is a string, and something extra.'
10
--------------------------------------------------------------------------------
Default argument values
스칼라 인수는 다음과 같이 C++ 과 비슷하게 기본값을 정해줄 수 있다. :
1
2 function makecoffee ($type = "cappucino") {
3 return "Making a cup of $type.\n";
4 }
5 echo makecoffee ();
6 echo makecoffee ("espresso");
7
위의 코드의 실행 결과는 다음과 같다 :
Making a cup of cappucino.
Making a cup of espresso.
default 값은 반드시 상수이어야 한다. (예를들어) 변수나 class의 멤버를 사용해서는 안된다.
PHP 4.0에서는 default argument로 unset을 지정할 수 있다. 이것은 해당 argument에 값이 제공되지 않으면, 절대로 값을 설정하지 않는 것을 의미한다.
default argument를 사용할 때, default가 되는 인수들은 non-default인 인수들보다 오른쪽에 위치해야 한다. 그렇지 않으면 원하는 결과가 나오지 않는다. 다음을 보자. :
1
2 function makeyogurt ($type = "acidophilus", $flavour) {
3 return "Making a bowl of $type $flavour.\n";
4 }
5
6 echo makeyogurt ("raspberry"); // won't work as expected
7
위 코드의 실행 결과는 다음과 같다 :
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
그러면 이제 위의 것과 아래것을 비교해 보자. :
1
2 function makeyogurt ($flavour, $type = "acidophilus") {
3 return "Making a bowl of $type $flavour.\n";
4 }
5
6 echo makeyogurt ("raspberry"); // works as expected
7
이 예제의 실행 결과는 다음과 같다. :
Making a bowl of acidophilus raspberry.
Returning values
함수는 return 문을 통해 함수값을 돌려줄 수 있다. list와 object를 포함한 어떤 type도 돌려질 수 있다.
1
2 function square ($num) {
3 return $num * $num;
4 }
5 echo square (4); // outputs '16'.
6
여러값을 돌려주는 일은 할 수 없다. 그러나 list를 돌려줌으로써 비슷한 일을 할 수 있다. :
1
2 function small_numbers() {
3 return array (0, 1, 2);
4 }
5 list ($zero, $one, $two) = small_numbers();
6
--------------------------------------------------------------------------------
old_function
OLD_FUNCTION 문장은 PHP/FI2에서 동일한 함수 사용법을 제공한다. (function대신 old_function을 사용한다는 점은 제외하고)
이것을 사용하는 것은 좋지 않은 방법이다. 이것이 사용될 때는 PHP/FI2->PHP3 변환기에서 뿐이다.
※ 주의
OLD_FUNCTION으로 정의된 함수들은 PHP의 내부 코드에서 호출될 수 없다. 이 말은 usort()나 array_walk(), register_shutdown_function()같은 함수에 사용할 수 없다는 의미이다. 이를 해결하기 위해서는 이 OLD_FUNCTION으로 선언된 함수를 호출하는 PHP3 형태의 함수를 만들어 사용하는 것이다.
--------------------------------------------------------------------------------
Variable functions
PHP는 가변 함수(variable functions) 개념을 지원한다. 이것은 변수명 뒤에 괄호가 왔을 때, PHP는 그 이름을 가진 함수를 찾아 실행한다는 것을 의미한다. 이 기능은 callbacks, function table 등의 기능에 사용하면 매우 유용하게 사용할 수 있다.
Example 8-1. Variable function example
1
2 <?php
3 function foo() {
4 echo "In foo()<br>\n";
5 }
6
7 function bar( $arg = '' ) {
8 echo "In bar(); argument was '$arg'.<br>\n";
9 }
10
11 $func = 'foo';
12 $func();
13 $func = 'bar';
14 $func( 'test' );
15 ?>
16
출처 : http://qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=50
함수는 다음과 같이 정의한다. :
1
2 function foo ($arg_1, $arg_2, ..., $arg_n) {
3 echo "Example function.\n";
4 return $retval;
5 }
6
함수 안에는 다른 함수나 class의 선언 등을 포함한 모든 가능한 PHP 코드가 사용될 수 있다.
PHP3에서는 함수는 그 함수가 사용되기 이전에 선언되어 있어야 하였으나 PHP4에서는 이런 제약이 없어졌다.
PHP는 function overloading을 지원하지 않고, 이미 정의된 함수를 재정의하거나 없애지 못한다.
PHP3에서는 함수 파라메터의 기본값을 설정해주는 것(default argument values를 보자.)은 가능해도, 파라메터의 개수를 가변으로 설정하는 것은 불가능했지만, PHP4는 두가지 모두 가능하다. 자세한 내용은 Variable-length argument lists 와 func_num_args(), func_get_arg(), func_get_args() 의 함수 설명을 보기 바란다.
--------------------------------------------------------------------------------
Function arguments
argument list를 통해 함수에 어떤 정보를 넘겨줄 수 있다. 이 argument list는 쉼표(,)로 나위어진 변수나 상수의 list이다.
PHP는 passing by value(기본적으로 이것을 사용)와 passing by reference, default argument values의 3가지 방법을 제공한다. 가변 길이(Variable-length) argument list는 PHP4이후에서만 제공된다. 자세한 내용은 Variable-length argument lists 와 func_num_args(), func_get_arg(), func_get_args() 의 함수 설명을 보기 바란다. 그러나 PHP3에서도 배열을 통한 전달을 사용한다면 비슷한 효과를 낼 수 있다.
1
2 function takes_array($input) {
3 echo "$input[0] + $input[1] = ", $input[0]+$input[1];
4 }
5
-------------------------------------------------------------------------------
Making arguments be passed by reference
기본적으로 함수의 인수(argument)들은 값으로 전달된다(passed by value). 함수내에서 변화시킨 값을 그대로 유지하려면 pass by reference로 인수를 넘겨야 한다.
여러분이 어떤 함수의 인수를 항상 pass by reference로 넘기려 한다면, 여러분은 함수를 선언할 때 ampersand(&)를 인수의 앞에 붙여주면 된다. :
1
2 function add_some_extra(&$string) {
3 $string .= 'and something extra.';
4 }
5 $str = 'This is a string, ';
6 add_some_extra($str);
7 echo $str; // outputs 'This is a string, and something extra.'
8
만약 기본은 by value 로 하지만 필요에 따라 by reference로 호출하고 싶다면 함수 호출 시에 인수의 앞에 &를 붙이면 된다. :
1
2 function foo ($bar) {
3 $bar .= ' and something extra.';
4 }
5 $str = 'This is a string, ';
6 foo ($str);
7 echo $str; // outputs 'This is a string, '
8 foo (&$str);
9 echo $str; // outputs 'This is a string, and something extra.'
10
--------------------------------------------------------------------------------
Default argument values
스칼라 인수는 다음과 같이 C++ 과 비슷하게 기본값을 정해줄 수 있다. :
1
2 function makecoffee ($type = "cappucino") {
3 return "Making a cup of $type.\n";
4 }
5 echo makecoffee ();
6 echo makecoffee ("espresso");
7
위의 코드의 실행 결과는 다음과 같다 :
Making a cup of cappucino.
Making a cup of espresso.
default 값은 반드시 상수이어야 한다. (예를들어) 변수나 class의 멤버를 사용해서는 안된다.
PHP 4.0에서는 default argument로 unset을 지정할 수 있다. 이것은 해당 argument에 값이 제공되지 않으면, 절대로 값을 설정하지 않는 것을 의미한다.
default argument를 사용할 때, default가 되는 인수들은 non-default인 인수들보다 오른쪽에 위치해야 한다. 그렇지 않으면 원하는 결과가 나오지 않는다. 다음을 보자. :
1
2 function makeyogurt ($type = "acidophilus", $flavour) {
3 return "Making a bowl of $type $flavour.\n";
4 }
5
6 echo makeyogurt ("raspberry"); // won't work as expected
7
위 코드의 실행 결과는 다음과 같다 :
Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .
그러면 이제 위의 것과 아래것을 비교해 보자. :
1
2 function makeyogurt ($flavour, $type = "acidophilus") {
3 return "Making a bowl of $type $flavour.\n";
4 }
5
6 echo makeyogurt ("raspberry"); // works as expected
7
이 예제의 실행 결과는 다음과 같다. :
Making a bowl of acidophilus raspberry.
Returning values
함수는 return 문을 통해 함수값을 돌려줄 수 있다. list와 object를 포함한 어떤 type도 돌려질 수 있다.
1
2 function square ($num) {
3 return $num * $num;
4 }
5 echo square (4); // outputs '16'.
6
여러값을 돌려주는 일은 할 수 없다. 그러나 list를 돌려줌으로써 비슷한 일을 할 수 있다. :
1
2 function small_numbers() {
3 return array (0, 1, 2);
4 }
5 list ($zero, $one, $two) = small_numbers();
6
--------------------------------------------------------------------------------
old_function
OLD_FUNCTION 문장은 PHP/FI2에서 동일한 함수 사용법을 제공한다. (function대신 old_function을 사용한다는 점은 제외하고)
이것을 사용하는 것은 좋지 않은 방법이다. 이것이 사용될 때는 PHP/FI2->PHP3 변환기에서 뿐이다.
※ 주의
OLD_FUNCTION으로 정의된 함수들은 PHP의 내부 코드에서 호출될 수 없다. 이 말은 usort()나 array_walk(), register_shutdown_function()같은 함수에 사용할 수 없다는 의미이다. 이를 해결하기 위해서는 이 OLD_FUNCTION으로 선언된 함수를 호출하는 PHP3 형태의 함수를 만들어 사용하는 것이다.
--------------------------------------------------------------------------------
Variable functions
PHP는 가변 함수(variable functions) 개념을 지원한다. 이것은 변수명 뒤에 괄호가 왔을 때, PHP는 그 이름을 가진 함수를 찾아 실행한다는 것을 의미한다. 이 기능은 callbacks, function table 등의 기능에 사용하면 매우 유용하게 사용할 수 있다.
Example 8-1. Variable function example
1
2 <?php
3 function foo() {
4 echo "In foo()<br>\n";
5 }
6
7 function bar( $arg = '' ) {
8 echo "In bar(); argument was '$arg'.<br>\n";
9 }
10
11 $func = 'foo';
12 $func();
13 $func = 'bar';
14 $func( 'test' );
15 ?>
16
출처 : http://qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=50
관련링크
댓글목록
등록된 댓글이 없습니다.