update : 2015.11.03
php.shukuma.com

검색:
 
 
가변 함수

가변 함수

PHP는 가변 함수에 대한 개념을 지원한다. 이 용어의 의미는 어떤 변수 뒤에 괄호가 따라온다면, PHP는 그 변수의 값을 갖는 함수를 찾아서 실행하려 할것이란 것이다. 이런 개념은 이기능 외에도 콜백과 함수 테이블 등등을 구현할수 있게 해준다.

가변 함수는 echo, print, unset(), isset(), empty(), include, require와 같은 언어 구조와 함께 작동하지 않을것이다. 래퍼 함수를 사용해서 이러한 구조를 가변 함수로 이용할 수 있습니다.

Example #1 가변 변수 사용예

<?php
function foo() {
    echo 
"foo() 안입니다.<br />\n";
}

function 
bar($arg '')
{
    echo 
"bar() 안입니다; 인수는 '$arg'입니다.<br />\n";
}

// echo를 감싸는 래퍼 함수입니다.
function echoit($string)
{
    echo 
$string;
}

$func 'foo';
$func();        // foo()를 호출합니다.

$func 'bar';
$func('test');  // bar()를 호출합니다.

$func 'echoit';
$func('test');  // echoit()을 호출합니다.
?>

객체 메쏘드도 가변 함수 구문으로 호출할 수 있습니다.

Example #2 가변 메쏘드 사용예

<?php
class Foo
{
    function 
Variable()
    {
        
$name 'Bar';
        
$this->$name(); // Bar() 메쏘드를 호출합니다.
    
}
    
    function 
Bar()
    {
        echo 
"This is Bar";
    }
}

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

?>

When calling static methods, the function call is stronger than the static property operator:

Example #3 Variable method example with static properties

<?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.

?>

As of PHP 5.4.0, you can call any callable stored in a variable.

Example #4 Complex callables

class Foo
{
    static function bar()
    {
        echo "bar\n";
    }
    function baz()
    {
        echo "baz\n";
    }
}

$func = array("Foo", "bar");
$func(); // prints "bar"
$f = array(new Foo, "baz");
$func(); // prints "baz"
$f = "Foo::bar";
$func(); // prints "bar" as of PHP 7.0.0; prior, it raised a fatal error

is_callable(), call_user_func(), variable variables, function_exists()섹션을 참고

변경점

버전 설명
7.0.0 'ClassName::methodName' is allowed as variable function.
5.4.0 Arrays, which are valid callables, are allowed as variable functions.