변수 함수
PHP는 변수 함수의 개념을 지원합니다. 즉, 변수 이름에 괄호가 추가되면 PHP는 변수가 평가되는 것과 동일한 이름을 가진 함수를 찾고 실행을 시도합니다. 무엇보다도 이것은 콜백, 함수 테이블 등을 구현하는 데 사용할 수 있습니다.
변수 함수는 echo, print, unset(), isset(), empty(), include, require 등과 같은 언어 구성에서 작동하지 않습니다. 래퍼 함수를 사용하여 이러한 구성을 변수 함수로 사용합니다.
예제 #1 변수 함수 예
<?php
function foo() {
echo "In foo()<br />\n";
}
function bar($arg = '')
{
echo "In bar(); argument was '$arg'.<br />\n";
}
// This is a wrapper function around echo
function echoit($string)
{
echo $string;
}
$func = 'foo';
$func(); // This calls foo()
$func = 'bar';
$func('test'); // This calls bar()
$func = 'echoit';
$func('test'); // This calls echoit()
?>
변수 함수 구문을 사용하여 개체 메서드를 호출할 수도 있습니다.
예제 #2 변수 메소드 예
<?php
class Foo
{
function Variable()
{
$name = 'Bar';
$this->$name(); // This calls the Bar() method
}
function Bar()
{
echo "This is Bar";
}
}
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname(); // This calls $foo->Variable()
?>
정적 메서드를 호출할 때 함수 호출은 정적 속성 연산자보다 강력합니다.
예제 #3 정적 속성이 있는 변수 메서드 예제
<?php
class Foo
{
static $variable = 'static property';
static function Variable()
{
echo 'Method Variable called';
}
}
echo Foo::$variable; // This prints 'static property'. It does need a $variable in this scope.
$variable = "Variable";
Foo::$variable(); // This calls $foo->Variable() reading $variable in this scope.
?>
예제 #4 복잡한 호출 가능
<?php
class Foo
{
static function bar()
{
echo "bar\n";
}
function baz()
{
echo "baz\n";
}
}
$func = array("Foo", "bar");
$func(); // prints "bar"
$func = array(new Foo, "baz");
$func(); // prints "baz"
$func = "Foo::bar";
$func(); // prints "bar"
?>