PHPで指定Classのプロパティとメソッドを一覧表示する

2006年12月13日 オフ 投稿者: KYO
Table of Contents

前に作った[ 定義済みClassの確認 ]のスクリプトを若干修正。
UI側にCSSでスタイルを指定して、ソース内部でClass名を指定するとプロパティとメソッドを一覧表示するように変更。
まだまだ半自動化って感じだけど、そこそこ使えそうなのでメモ。


ただし、$myclassのリスト名はそのまま内部でrequire()しているので、Class名とClassファイル名が同一なのが前提条件。
仮にClass名とClassファイル名が異なる場合は、個々にrequire()すればOK。

<?php
//
// +------------------------------------------------------------+
// | 定義済みClass Checker                                        |
// +------------------------------------------------------------+
//{{{ DESCRIPTION
// +------------------------------------------------------------+
// | 内部で指定されたClassの定義状態を確認
// | 定義済みのClassはメソッドとプロパティーを表示
// +------------------------------------------------------------+
//}}} DESCRIPTION
//
/* include path セット */
//ini_set('include_path', '');
/* Check Class List */
// Class名とClassファイル名が同一じゃないと正常に動作しない
$myclass = array(
'Class1', 'Class2', 'Class3',
);
/* Class ListのClassを自動include */
for($i=0; $i<count($myclass); $i++){
require_once($myclass[$i]. '.php');
}
/* ClassListの取得 */
$class_list = getDefinitionClasslist();
/* HTML出力 */
getHTMLLayout('定義済みClassリスト', $class_list);
exit();
//{{{ getDefinitionClassList() --- 定義済みClassのHTML出力
/**
*    定義済みClassのHTML出力
*        @param:        array
*        @return:    string    html
*        @access:    public
*/
function getDefinitionClassList()
{
global $myclass;
$html = '';
for($i=0; $i<count($myclass); $i++){
/* プロパティの出力 */
$property = print_r( get_class_vars($myclass[$i]), true);
/* メソッドの出力 */
$method = print_r( get_class_methods($myclass[$i]), true);
/* レイアウト調整 */
// property
$property = preg_replace('/ /', '&nbsp;', $property);
$property = nl2br($property);
// method
$method = preg_replace('/ /', '&nbsp;', $method);
$method = nl2br($method);
$html .=<<<EOF
<!-- class -->
<ul class="parent">
<li class="parent_title">{$myclass[$i]}::property</li>
<li>
<!-- property -->
<ul class="child">
<li class="child_title">{$myclass[$i]}::property</li>
<li class="child_list">{$property}</li>
</ul>
<!-- property -->
</li>
<li class="parent_title">{$myclass[$i]}::method</li>
<li>
<!-- method -->
<ul class="child">
<li class="child_title">{$myclass[$i]}::method</li>
<li class="child_list">{$method}</li>
</ul>
<!-- method -->
</li>
</ul>
<!-- class -->
EOF;
}
return $html;
}
//}}}
//{{{ getHTMLLayout() --- HTMLソース(レイアウト)出力
/**
*    HTMLソース(レイアウト)出力
*        @param:        $title    htmlタイトル
*        @param:        $contents html内コンテンツ
*        @return:    string    html
*        @access:    public
*/
function getHTMLLayout($title, $contents)
{
print<<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
<title>{$title}</title>
<meta http-equiv="description" content="">
<meta http-equiv="keywords" content="">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="content-script-type" content="text/javascript">
<link rel="stylesheet" type="text/css" href="./_.css" media="all">
<style type="text/css">
<!--
*{margin: 0; padding: 0; font-size: 10pt;}
div.html_container{width: 760px; background: #fff;}
div.html_header{height: 3em; text-align: center; background: #eee;}
div.html_contents{padding: 1em; border: 1px solid #ccc;}
div.html_footer{footer: 1.5em; text-align: right; background: #eee;}
ul{list-style-type: none; list-style-position: inside;}
ul.parent{border: 1px solid #ccc;}
li.parent_title{background: #69c; font: #fff;}
ul.child{margin: 1em; border: 1px solid #ccc;}
li.child_title{border: 1px solid #ccc; background: #eee;}
li.child_list{margin-left: 3em;}
-->
</style>
</head>
<body>
<!-- html_container -->
<div class="html_container">
<!-- page_header -->
<div class="html_header">{$title}</div>
<!-- page_header -->
<!-- page_contents -->
<div class="html_contents">
{$contents}
</div>
<!-- page_contents -->
<!-- page_footer -->
<div class="html_footer">
<a href="{$_SERVER['SCRIPT_NAME']}">{$title}</a>
</div>
<!-- page_footer -->
</div>
<!-- html_container -->
</body>
</html>
EOF;
}
//}}}