php - 함수

2 minute read

함수

사용자 선언 함수

기본 모양 ** 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);


🔗original-link

Updated: