[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
コメント
コメントを投稿