PHP > Tips > PHPのちょっと便利なTips

2006年08月16日

PHPのちょっと便利な使い方。 何となくマニュアルを眺めてると今まで知らない機能を見つけたのでメモ。
オープンソースのコードを読んでいても見た事が無かった書き方なので、多分マイナーな書き方なんだと思う。

オブジェクトを動的に変える。

クラス内で

$obj = new $className();
$this = $obj;

としてやると$thisを全く別のオブジェクトに変えれる。

サンプル

class Test{

    function test($className){
        $obj = new $className();
        $this = $obj;
    }
    
}

class Hoge{

}

$obj = new Test('Hoge');
print get_class($obj);//hogeと表示される

メリット

動的にオブジェクトを変えれる事にそれ程メリットは無いのだけれど、 ファクトリーメソッドを使う場合に使えると思う。 デザパタとか良く分かってないので、間違っているかも知れないけど・・・。

例えば、PEARのServices_Yahooを使う場合

$search = Services_Yahoo_Search::factory("web");

としてオブジェクトを生成するのだけれど、これを

$search = new Services_Yahoo_Search("web");

としてやる事が出来る。

大した違いは無いけれど、個人的には
クラス::メソッド() という書き方があまり好きで無いので、コンストラクター内部で
$this = $obj としてオブジェクトを生成する方が好み。

declare命令

今更、PHPの制御構造についてマニュアルを見る事も無かったので、全く知らなかったけど、 先日、何となくマニュアルを眺めてたら目に付いたdeclare。

使い方はPHP: declare - Manual を参照。 何だかよく分からない命令文なんだけど、

function test(){

}

register_tick_function("test");

declare(ticks=1) {
   // ここに全てのスクリプトを書く
   // ここに書いた命令を一回実行するごとに、function test()が実行される
   // ticks=2としてやれば2回毎に実行出来る
}

という事らしい。 パフォーマンスを調べる時なんかに便利かも。

マニュアルにも書いてあるけど、上手く書けばマルチタスク処理や、 スクリプトを実行しながらバックグラウンドで別の処理をしたり、 使い方によってはいろいろ出来そう。

posted by 37to at : 11:59 | コメント (0) | トラックバック (0)

コメント

この記事に対するコメントはまだありません。


投稿する

投稿者情報を保存しますか?


トラックバック

トラックバックURI


一覧

この記事に対するトラックバックはまだありません。