가변 함수 (variable function)


가변 함수란 PHP에서 함수를 호출할 때 동적으로 함수를 호출할 수 있는 기능입니다.


문법


지금까지 함수 선언 function 키워드를 통해 정의한 함수 이름을 사용하여 함수를 호출했습니다.
소스상에서 선언한 함수명을 기준으로 직접 함수명(); 형태로 적어서 함수를 호출하여 사용했습니다.

|문법|

$변수명 = "함수 이름";
$변수명();

가변 함수는 변수명에 함수명을 대입하고 $변수명(); 형태로 함수를 호출할 수 있습니다.

함수명을 임시변수에 문자열로 저장한 후에 저장된 문자열과 일치하는 함수를 호출하는 것입니다.


가변 함수 호출


가변 함수 호출은 동적으로 함수를 처리하여 호출할 때 매우 유용합니다.
가변 함수를 이용하면 프로그램 로직 또는 입력값을 분석하여 동적으로 함수를 실행할 수 있는 장점 등이 있습니다.

if($func=="aaa"){
	aaa();
} else if($func=="bbb"){
	bbb();
} else if($func=="ccc"){
	ccc();
}

위와 같이 조건에 따라서 각각 다르게 함수 호출을 처리해야 하는 경우에는 가변 함수 호출을 통해 쉽게 작성할 수 있습니다.

기존 함수 호출 방식

<?php

function hello() {
    echo "hello() 함수입니다.<br />\n";
}

hello();
?>

가변 함수 호출 방식
예제 파일 func-18.php

<?php

	function hello() {
    	echo "hello() 함수입니다.<br />\n";
	}
	
	$func = "hello";
	$func();

?>

결과

hello() 함수입니다.

위의 예제를 보면 $func 변수에는 함수명을 저장합니다. 저장된 변수의 함수명을 이용하여 함수를 호출합니다.
이처럼 변수를 이용하여 가변적으로 함수를 호출할 수 있는 방법이 가변 함수입니다.


클래스 가변 메서드


가변 함수 문법은 향후 설명할 클래스에서도 메서드를 호출할 때 비슷한 방법으로 호출할 수 있습니다.
여기서는 간단히 학습하겠습니다.

클래스 & 가변 함수
예제 파일 func-19.php

<?php
class jiny
{
	function Variable()
	{
			$name = 'Bar';
			$this->$name(); // Bar() 메서드를 호출합니다.
	}

	function Bar()
	{
			echo "This is Bar";
	}
}

$jiny = new jiny();
$funcname = "Variable";
$jiny->$funcname();  // $jiny->Variable()를 호출합니다.

?>

결과

This is Bar

위의 예제처럼 클래스를 선언하고, 인스턴스를 생성한 후에 클래스에서 호출하는 메서드도 변수를 통해 가변 메서드 형태로 호출할 수도 있습니다.