php - 함수
함수
사용자 선언 함수
기본 모양 ** function fn_name($arg1,$arg2,$arg3=’1’,….){** ~~~~~~** return $ret_val;** }
특징
- 이미 선언된 함수명은 재선언할 수 없다. (Fatal Error발생)
- 함수 오버라이딩을 지원하지 않는다.
- 함수명은 대소문자 구분하지 않는다. (하지만, 사용시 선언된 모양 그대로 사용하는 편이 좋다.)
-
function Abc(){~~}
abc(); // Abc()를 호출한다. - 함수 안에서 함수를 선언할 수 있다.
- 함수는 모두 전역 함수로 동작한다.
- 어디에서 선언하던지…
-
하지만 클래스 내에서 함수를 선언하면 클래스의 메소드가 된다.
- 재귀함수사용시 재귀레벨이 100~200 정도 되면 멈출 수 있다.(오류로 간주한다고하네.)
-
이럴 경우 루프문으로 바꿔서 처리하라
- 아규멘트에 기본 값을 줄 수 있다.
- function fn($arg=’def’){~~~}
함수 인수
인자 전달 방법
- function fn($arg){ }
-
call by value 로 값을 넘김
- function fn(& $arg){ }
- call by reference 로 값을 넘김
- 주의
-
fn(& $x);
이런 식으로 함수 호출하지 말라!
& 표현은 함수 선언쪽에만 해야한다. (PHP5부터 warning이 발생한다.) - function fn(TypeHint $v){ }
- TypeHint 로 넘겨받는 쪽의 변수형를 선언할 수 있다. (클래스도 가능)
-
declare(strict_types=1);
를 선언하고 TypeHint와 다른 변수형이면, Fatal error가 발생한다. - function fn(…$args){}
- 가변 길이 인수를 사용하는 방법이다. (PHP 5.6+)
- fn(1,2,3,4,5);
처럼 호출하면
$args 는 array(1,2,3,4,5) 처럼 동작하게 된다. -
PHP 5.6 이하에서는 func_num_args(), func_get_arg(), func_get_args() 를 사용해야한다.
- 호출할 때
fn(…[1,2]);
처럼 하면 - function fn($a,$b){}
에 맞춰 동작 시킬 수 있다.
반환값
function fn($arg){
return $arg*2;
}
- 함수(메소드)내에서 return을 만다면 그 즉시 동작을 중단한다.
- return 오른쪽에 변수 등이 있으면 그 값을 반환한다.
-
오른쪽에 값이 없다면 NULL을 반환.
- return 언어 구조이다.
-
따로 ()로 감쌀 필요가 없으며, 감싸지 않는 편이 더 좋다.
- function &fn($arg){return $ret;}
$val = &fn(1); -
이렇게 할경우 참조로 리턴될 것이다.
- function fn($arg) : float{
return $arg*1.1;
} - 리턴 값의 타입은 float가 된다.
가변 함수
- 간력하게 설명하면, 호출 함수(메소드)의 이름을 문자열로 지정해서 사용할 수 있다.
- 한마디 : 빌더 등을 만들 때 꽤 자주 사용된다.
- $fn_name = ‘xxyyzz’;
$fn_name(); //xxyyzz(); 를 호출하는 것과 같은 효과 - 가변 메소드로 할 경우
- $fn_name = ‘xxyyzz’;
$obj->$fn_name(); //$obj->xxyyzz(); 를 호출하는 것과 같은 효과
$obj::$fn_name(); //$obj::xxyyzz(); 를 호출하는 것과 같은 효과 - $class_name::$fn_name(); 은 php 7.0에서 지원된다.
내부 (내장) 함수
- 이미 선언되어있는 함수
-
필요에 따라서는 컴파일 시 옵션을 줘야한다.
-
한마디 : PHP는 기본적으로 유용하다 싶은 많은 함수들이 이미 선언되어있다. 메뉴얼에서 그 함수들으르 꼭 한번씩 일어보기 바란다.
- 인스톨 방법, 인자 순서, 사용 예제 등등이 적혀있다.
-
특히 배열, 문자열 부분은 필수!
- 이미 선언되어있는지 체크할려면?
- function_exists($fn_name); 등을 사용하라.
- 클래스라면?
- class_exists() , method_exists()
익명 함수
- 함수명이 없는 함수. 함수 자체를 그곳에서 선언해서 쓰는 함수를 의미한다.
-
anonymous function
- 익명 함수의 타입은 객체이다.
-
Closure 클래스로부터 만들어진다.
- php 5.3 부터 지원.
- 메뉴얼에서 callback (or callable) 이라고 표시된 부분에서 바로 사용할 수 있다.
- php 5.3 미만에서는 함수명을 적는게 기본이었다.
기본모양 echo fn_parent(1, function($arg){
return $arg*1.1; });
$fn = function($arg){ return $arg*1.1; }
echo $fn(1);