변수 함수

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"
?>
                  
                
기타