Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 변수 함수(Variable Function) 개념과 활용 예제 총정리

소개

PHP에서는 변수 이름 뒤에 괄호를 붙이면(괄호 안에 매개변수가 있든 없든) PHP 파서가 해당 변수의 값과 일치하는 이름을 가진 함수를 찾아 실행합니다. 이렇게 동작하는 함수를 변수 함수(variable function)라고 부릅니다. 이 기능은 콜백(callback) 구현이나 함수 테이블(function table) 작성 등에 매우 유용하게 활용됩니다.

다만 include, require, echo와 같은 언어 구조(language constructs)에는 변수 함수 문법을 직접 사용할 수 없습니다. 이 경우에는 함수 래퍼(wrapper)를 만들어 우회하는 방법을 사용해야 합니다.

변수 함수 기본 예제

다음 예제에서는 변수의 값이 함수 이름과 일치합니다. 변수 뒤에 괄호를 붙이면 해당 함수가 호출됩니다.

예제

<?php
function hello(){
   echo "Hello World";
}
$var="Hello";
$var();
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Hello World

다음은 인수(argument)를 함께 전달하는 변수 함수의 또 다른 예제입니다.

예제

<?php
function add($x, $y){
   echo $x+$y;
}
$var="add";
$var(10,20);
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

30

다음 예제에서는 호출할 함수의 이름을 사용자로부터 입력받아 실행합니다.

예제

<?php
function add($x, $y){
   echo $x+$y;
}
function sub($x, $y){
   echo $x-$y;
}
$var=readline("enter name of function: ");
$var(10,20);
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

enter name of function: add
30

변수 메서드 예제

변수 함수의 개념은 클래스의 메서드(method)에도 그대로 확장하여 적용할 수 있습니다.

예제

<?php
class myclass{
   function welcome($name){
      echo "Welcome $name";
   }
}
$obj=new myclass();
$f="welcome";
$obj->$f("Amar");
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Welcome Amar

정적(static) 메서드 역시 변수 메서드 기법으로 호출할 수 있습니다.

예제

<?php
class myclass{
   static function welcome($name){
      echo "Welcome $name";
   }
}
$f="welcome";
myclass::$f("Amar");
?>

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Welcome Amar

마무리 및 주의 사항

변수 함수는 코드의 유연성을 크게 높여 주는 강력한 기능입니다. 하지만 사용자 입력값을 그대로 함수 이름으로 사용하는 것은 보안상 위험할 수 있습니다. 악의적인 입력으로 시스템 내부의 민감한 함수가 호출되지 않도록, 반드시 허용된 함수 이름 목록(화이트리스트)을 검증한 후에 호출하는 것이 안전합니다.