忍者ブログ
[PR]
×

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



2024/04/26 20:36 |
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() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






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



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