phpで変数で変数を参照するまとめ
7 月 7, 2009
phpで変数で変数参照する書き方ができると、プログラムもかなりすっきりするので個人的には結構好きなんで、まとめておこー。
変数で変数を参照
とりあえずコード。
$a = "b"; ${$a} = "c"; echo $b."\n"; //c
意外と忘れがちな、変数で、変数参照するパターン。
まん中の${$a}の部分。変数bは存在しないが、$aの中身を変数として扱うため、$bにcが代入され、cが表示される。
変数で関数を参照
class refer { function a() { return "a_from_function"; } function b() { return "b_from_function"; } } $obj = new refer(); $function_name = "b"; $string = $obj->$function_name(); echo $string."\n"; // b_from_function
ちょっと長めですが。
インスタンスを作成して、その中のfunctionを参照するときには変数で参照が可能。
referというインスタンスの中に、aというfunctionとbというfunctionを定義。
$function_nameという変数を用意して、インスタンスの関数を呼びだす。
$function_nameの中身はbだから、bのfunctionが実行されるので b_from_function という結果が返ってくる。
defineされた値を変数参照
define("A","a_from_define"); $define_name = "A"; $string = constant($define_name); echo $string."\n"; // a_from_define
phpにはconstantという関数があって、これを使えば簡単にdefineされた値に変数で参照できる。
説明するより、プログラム見たほうが早そう。
とりあえずこの3つだけでも覚えておくと、プログラムがすっきり書けたりするので覚えておいて損はないかも。
特にfunctionの部分は、同じような処理をするけど、function別に処理しないと困るし・・・なんてときにいいかも。うむ。いい例が浮かびませんでした。
macから初めて投稿してみた!
まだまだ慣れませぬ・・・・
Tags: php
変数で変数参照する書き方には、extract関数と似た臭いがするような気がします。これは当然のことですが、使い方を誤ると、セキュリティホールになるかと。
コメント by iso — 2009 年 7 月 7 日 @ 1:44 AM
@iso
コメントあざっす!
extract関数は使ったことなかったですが、こんな関数あるんですねー使ったことなかったです。
セキュリティホールはもちろんですね・・・書き手のレベルが求められるかと^^;
コメント by admin — 2009 年 7 月 8 日 @ 12:40 AM