Php/docs/functions.variable-functions

提供:Dev Guides
< Php
移動先:案内検索

可変関数

PHP は可変関数(variable functions)の概念をサポートします。 これにより、変数名の後に括弧が付いている場合、その値が何であろうと PHPは、同名の関数を探し実行を試みます。 この機能は、コールバック、関数テーブル等を実装するために使用可能です。

可変関数は、echo, print, isset(), empty(), include, require のような言語構造と組み合わせて使用する ことはできません。これらの言語構造を可変変数として使うには 独自のラッパー関数を使う必要があります。

例1 可変関数の例

<?phpfunction foo(){    echo "In foo()<br />\n";}function bar($arg = ){    echo "In bar(); argument was '$arg'.<br />\n";}// これは、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 可変メソッドの例

<?phpclass Foo{    function Variable()    {        $name = 'Bar';        $this->$name(); // Bar() メソッドのコール    }        function Bar()    {        echo "This is Bar";    }}$foo = new Foo();$funcname = "Variable";$foo->$funcname();  // $foo->Variable() をコールする?>

静的メソッドをコールするときには、関数呼び出しのほうが静的プロパティ演算子よりも優先されます。

例3 静的プロパティを含む可変メソッドの例

<?phpclass Foo{    static $variable = 'static property';    static function Variable()    {        echo 'Method Variable called';    }}echo Foo::$variable; // これは 'static property' を表示します。このスコープにおいて $variable が必要です。$variable = "Variable";Foo::$variable();  // これは $foo->Variable() をコールします。このスコープでの $variable の内容を読むからです。?>

例4 複雑な callable

<?phpclass Foo{    static function bar()    {        echo "bar\n";    }    function baz()    {        echo "baz\n";    }}$func = array("Foo", "bar");$func(); // "bar" を表示します$func = array(new Foo, "baz");$func(); // "baz" を表示します$func = "Foo::bar";$func(); // "bar" を表示します。?>