by shigemk2

当面は技術的なことしか書かない

リフレクション

PHP5から使えるようになってれぅ。

リフレクションについては、introにこう書いてある。
PHP: 導入 - Manual

クラス、インターフェイス、関数、メソッド、そして拡張モジュールについて リバースエンジニアリングを行うことができます。

まあ要するにリフレクションを使えば、privateメソッドでも実行が可能となるわけだ。
これでテストが楽に書けるかもしれない。

とにもかくにも、まあコードを見てみようじゃないか。

コード

<?php
class Hoge {

  private function aaa() {
    print_r("書いたなコイツ\n");
  }

}

// http://www.php.net/manual/ja/class.reflectionmethod.php
// リフレクションメソッドのインスタンスを生成する
$method = new ReflectionMethod('Hoge', 'aaa');
// http://jp2.php.net/manual/ja/reflectionmethod.setaccessible.php
// メソッドのアクセス範囲を設定する
$method->setAccessible(true);
// http://www.php.net/manual/ja/reflectionmethod.invoke.php
// 実行する
$method->invoke(new Hoge);

結果

書いたなコイツ

なるほど。