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