[PHP] 可変関数/可変変数について

可変関数は関数名を変数に設定して、変数に応じて対応する処理を呼び出すことが出来る関数です。

また、関数と同様に、変数に関しても可変にすることが出来ます。

可変関数

構文

$変数()

[実装例]通常の関数を可変関数として呼び出す

コード

function test_variable_function(string $value) {
    echo $value . "\n";
}

$function = "test_variable_function";
$function("call variable function test.");

実行結果

このコードは正しく実行でき、以下のように出力されます。

call variable function test.

[実装例]オブジェクトのメソッドを可変関数として呼び出す - 1

クラスオブジェクトのメソッドを可変関数で呼び出す場合は、呼び出すための変数を配列で指定し、第一引数にオブジェクトのインスタンス、第二引数にメソッド名を指定します。

コード

class Test {
    function test_variable_function(string $value) {
        echo $value . "\n";
    }
}

$function = [new Test(), "test_variable_function"];
$function("call variable function test.");

[実装例]オブジェクトのメソッドを可変関数として呼び出す - 2

クラスオブジェクトのメソッドを可変関数で呼び出す場合は、呼び出すための変数を配列で指定し、第一引数にオブジェクトのインスタンス、第二引数にメソッド名を指定します。

コード

class Test {
    function test_variable_function(string $value) {
        echo $value . "\n";
    }
}

$test = new Test();
$function = "test_variable_function";
$test->$function("call variable function test.");

[実装例]オブジェクトのstaticメソッドを可変関数として呼び出す - 1

クラスのstaticメソッドを可変関数で呼び出す場合は、呼び出すための変数を配列で指定し、第一引数にクラス名、第二引数にメソッド名を指定します。

コード

class Test {
    static function test_variable_function(string $value) {
        echo $value . "\n";
    }
}

$function = [Test::class, "test_variable_function"];
$function("call variable function test.");

[実装例]オブジェクトのstaticメソッドを可変関数として呼び出す - 2

staticメソッドを可変関数で呼び出すには、「クラス名::メソッド名」ように指定することも可能です。

コード

class Test {
    static function test_variable_function(string $value) {
        echo $value . "\n";
    }
}

$function = "Test::test_variable_function";
$function("call variable function test.");

[実装例]オブジェクトのstaticメソッドを可変関数として呼び出す - 3

staticメソッドを可変関数で呼び出すには、「クラス名::メソッド名」ように指定することも可能です。

コード

class Test {
    static function test_variable_function(string $value) {
        echo $value . "\n";
    }
}

$function = "test_variable_function";
Test::$function("call variable function test.");

※サンプルコードの実行結果は全て同じ出力になります。

可変変数

可変変数はターゲットとなる変数名の文字列を、変数に入れて「$」を接頭辞につけてアクセスします。

[実装例]可変変数

以下の例では、変数$varの変数名を$nameに入れて、$$nameによって変数$varにアクセスしています。

コード

$var = 'Test';
$name = 'var';
echo "Hello ", $$name , "\n";

実行結果

$ php test.php
Hello Test

[実装例]2段以上の可変変数

可読性は低下しそうですが、「$」を重ねて2段以上の可変変数を使うことも可能です。

コード

$var = 'Test';
$name = 'var';
$test = 'name';
echo "Hello ", $$$test , "\n";

実行結果

$ php test.php
Hello Test

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)