/** * ヘルプを表示 * * @param string $class クラス名 * @param string $method メソッド名 * @param boolean $flush 出力するか * @return string */ public static final function help($class, $method = null, $flush = true) { $ref = new self($class); $doc = "\nHelp in class " . $ref->name() . " "; $docs = array(); $tab = " "; if (empty($method)) { $doc .= ":\n"; $doc .= $tab . str_replace("\n", "\n" . $tab, $ref->document()) . "\n\n"; if ($ref->is_extends()) { $doc .= $tab . "Extends:\n"; $doc .= $tab . $tab . $ref->extends() . "\n\n"; } if ($ref->is_mixin_object()) { $doc .= $tab . "Mixin:\n"; foreach ($ref->mixin_object() as $o) { $doc .= $tab . $tab . $o . "\n"; } $doc .= "\n"; } $doc .= $tab . "Author:\n"; $doc .= $tab . $tab . $ref->author() . "\n\n"; $doc .= $tab . "Valid line: \n"; $doc .= $tab . $tab . $ref->valid_line() . " lines"; $doc .= "\n\n"; $doc .= $tab . "Const: \n"; foreach ($ref->def() as $d) { $doc .= $tab . $tab . "[" . $d->name() . "]" . $tab . $d->document() . "\n"; } $doc .= "\n"; $public = $static = $protected = $methods = array(); foreach ($ref->methods() as $name => $m) { if (!$m->is_extends()) { if ($m->is_public()) { if ($m->is_static()) { $static[$name] = $m; } else { $public[$name] = $m; } } else { if ($m->is_protected() && !$m->is_final() && !$m->is_static()) { $protected[$name] = $m; } else { if (!$m->is_private() && substr($m->name(), 0, 1) != "_") { $methods[$name] = $m; } } } } } $doc .= $tab . "Static methods defined here:\n"; $len = Text::length(array_keys($static)); foreach ($static as $m) { $doc .= $tab . $tab . str_pad($m->name(), $len) . ": " . $m->summary() . "\n"; } $doc .= "\n\n"; $doc .= $tab . "Methods defined here:\n"; $len = Text::length(array_keys($public)); foreach ($public as $m) { $doc .= $tab . $tab . str_pad($m->name(), $len) . ": " . $m->summary() . "\n"; } $doc .= "\n\n"; $doc .= $tab . "Methods list you can override:\n"; $len = Text::length(array_keys($protected)); foreach ($protected as $m) { $doc .= $tab . $tab . str_pad($m->name(), $len) . ": " . $m->summary() . "\n"; } $doc .= "\n\n"; $doc .= $tab . "Methods list:\n"; foreach ($methods as $m) { $doc .= $tab . $tab . $m->str() . "\n"; } } else { if ($ref->is_methods($method)) { $m = $ref->in_methods($method); $doc .= "in method " . $method . ":\n"; $doc .= $tab . str_replace("\n", "\n" . $tab, $m->document()) . "\n\n"; $doc .= "\n"; if ($m->is_author()) { $doc .= $tab . "Author:\n"; $doc .= $tab . $tab . $m->author() . "\n\n"; } $doc .= $tab . "Parameter:\n"; $len = Text::length(array_keys($m->param())); foreach ($m->param() as $name => $o) { $doc .= $tab . $tab . str_pad($name, $len) . " : [" . $o->type() . "] " . ($o->require() ? "" : "(default: " . $o->default() . ") ") . $o->document() . "\n"; } $doc .= "\n"; $doc .= $tab . "Return:\n"; $doc .= $tab . $tab . $m->return() . "\n\n"; if ($m->is_request()) { $doc .= $tab . "Request:\n"; $len = Text::length(array_keys($m->request())); foreach ($m->request() as $name => $d) { $doc .= $tab . $tab . str_pad($name, $len) . " : " . $d . "\n"; } $doc .= "\n"; } if ($m->is_module()) { $doc .= $tab . "Module Method:\n"; $len = Text::length(array_keys($m->module())); foreach ($m->module() as $name => $d) { $doc .= $tab . $tab . str_pad($name, $len) . " : " . $d . "\n"; } $doc .= "\n"; } } else { throw new InvalidArgumentException($class . " " . $method . " not found"); } } if ($flush) { print $doc; } return $doc; }