忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/09/26 05:22 |
PHP1-70:リフレクション

リフレクションを使うとクラスや関数の中身を解析することが出来ます。
PHPって基本的にソースが丸見えなんで、リバースエンジニアリングの意味がないような気がしないでもないんですが。
PHPの組み込み関数やエクステンションなどはPHPで書かれているわけではないので、そういう場合に中身を知りたい時に使うといいかもしれませんが、組み込み関数ならマニュアルを見ればいいし、いざとなればソースを見た方がより正確です。
まあソースはCなんでちょっと読めないのですが、そういう私みたいな中途半端な人がリフレクション使って役に立つものなんですかね?

使用法としては

・ReflectionFunctionに関数を突っ込む
・ReflectionClassにクラスを突っ込む
・ReflectionObjectにオブジェクトを突っ込む
・ReflectionMethodにメソッドを突っ込む
・ReflectionPropertyにクラス変数を突っ込む
・ReflectionExtensionにモジュールを突っ込む

となります。
その後は適当なメソッドを実行するだけで、例えばReflection::export()で簡単に内容の一覧を取得できます。
それ以外にも多様なメソッドで内容を解析できます。

Reflection_Extension.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    
    $ret=array();
    
    //エクステンションの一覧
    $ext=get_loaded_extensions();
    
    //各エクステンションに対して
    foreach($ext as $val){
        $ref=new ReflectionExtension($val);
        //エクステンション名
            $ref_name =$ref->getName();
        //中に入っているクラス
            $ret[$ref_name]['class']=$ref->getClasses();
        //中に入っている関数
            $ret[$ref_name]['function']=$ref->getFunctions();
    }
    
    print("<html><pre>");var_dump($ret);die();

凄く簡単ですが、この例では、全てのエクステンションに対して、順番にクラスの一覧と関数の一覧を取得しています。

正直、なんのために使えばいいのかよくわからないんですが。
たとえばここのCurrency converterでは呼び出すメソッドを変更していますが、

$CurrencyConverter->{$_GET['currency1'].'-'.$_GET['currency2']}

でいいじゃない、とか。
開発時専用の機能のような気がしてならない。

 

PR


2009/04/24 18:32 | Comments(0) | TrackBack(1) | PHP

トラックバック

トラックバックURL:
> Zend_Debug::dump() メソッドが、PHP の関数 ≫ var_dump() をラップしたものであることを理解すると有益でしょう。 ということでvar_dumpが少々見やすくなります。 中身はvar_dumpを出力制御で奪い取って正規表現で装飾してるだけという単純な内容でした。 クラス名を見て期待していたリフレクションなんかは全く行ってくれないようです。 オブジェクトなら勝手にリフレクションしてくれるようなvar_dump()を期待してたのに。残念。 ...
弱小PHPerの憂鬱 | 2010/05/17 22:44

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<中国がソースコード開示強行 | HOME | PHP1-69:タイプヒンティング>>
忍者ブログ[PR]