class person {
/** type=name */
public $name;
/** type=sex */
public $gender;
/** type=sayfunction */
public function say() {
echo $this->name, "\tis ", $this->gender, '<br />';
}
/** type=setfunction */
public function __set($name, $value) {
echo "Setting $name to $value<br />";
$this->$name = $value;
}
/** type=getfunction */
public function __get($name) {
if (!isset($this->$name)) {
echo '未设置';
$this->$name = '正在为你设置默认值';
}
return $this->$name;
}
} $obj = new ReflectionClass('person');
$className = $obj->getName();
$Comments = $Methods = $Properties = array();
//var_dump($obj->getProperties());
foreach ($obj->getProperties() as $v) {
$Properties[$v->getName()] = $v;
if ($v->isPublic()) {
$docblock = $v->getDocComment();
preg_match('/ type\=([a-z_]*) /', $docblock, $matches);
$Comments[$v->getName()] = $matches;
//var_dump($Comments);
}
}
foreach ($obj->getMethods() as $v) {
$Methods[$v->getName()] = $v;
if ($v->isPublic()) {
$docblock = $v->getDocComment();
preg_match('/ type\=([a-z_]*)/', $docblock, $matches);
$Comments[$v->getName()] = $matches;
}
}
echo "class {$className} {<br />";
if (is_array($Properties) && ksort($Properties)) {
foreach ($Properties as $k => $v) {
if (is_array($Comments)) {
foreach ($Comments as $kk => $vv)
foreach ($vv as $kkk => $vvv)
if ($kkk === 0)
echo '// ', $vvv, '<br />';
}
echo $v->isPublic() ? 'public ' : '', $v->isPrivate() ? 'private ' : '', $v->isProtected() ? 'protected ' : '',
$v->isStatic() ? 'static ' : '';
echo "{$k}<br /><br />";
}
}
echo '<br />';
if (is_array($Methods) && ksort($Methods)) {
foreach ($Methods as $k => $v) {
if (is_array($Comments)) {
foreach ($Comments as $kk => $vv)
foreach ($vv as $kkk => $vvv)
if ($kkk === 0)
echo '// ', $vvv, '<br />';
}
echo $v->isPublic() ? 'public ' : '', $v->isPrivate() ? 'private ' : '', $v->isProtected() ? 'protected ' : '',
$v->isStatic() ? 'static ' : '', "function {$k}(";
$func = new ReflectionMethod('person', $k);
if ($func->getNumberOfParameters()) {
foreach ($func->getParameters() as $vv) {
if ($vv->getPosition() != '#0')
echo ', ';
else
echo '';
echo "\${$vv->getName()}";
}
}
echo ') {<br />';
echo '}<br /><br />';
}
}
输出显示:
class person {
// type=name
// type=sex
// type=sayfunction
// type=setfunction
// type=getfunction
public gender// type=name
// type=sex
// type=sayfunction
// type=setfunction
// type=getfunction
public name
// type=name
// type=sex
// type=sayfunction
// type=setfunction
// type=getfunction
public function __get($name) {
}// type=name
// type=sex
// type=sayfunction
// type=setfunction
// type=getfunction
public function __set($name, $value) {
}// type=name
// type=sex
// type=sayfunction
// type=setfunction
// type=getfunction
public function say() {
}我想输出:
class person {
// type=sex
public gender // type=name
public name // type=getfunction
public function __get($name) {
} // type=setfunction
public function __set($name, $value) {
} // type=sayfunction
public function say() {
}请问怎么实现?propertiescommentsfunctionmethodsclass
class person {
/** type=name */
public $name;
/** type=sex */
public $gender;
/** type=sayfunction */
public function say() {
echo $this->name, "\tis ", $this->gender, '<br />';
}
/** type=setfunction */
public function __set($name, $value) {
echo "Setting $name to $value<br />";
$this->$name = $value;
}
/** type=getfunction */
public function __get($name) {
if (!isset($this->$name)) {
echo '未设置';
$this->$name = '正在为你设置默认值';
}
return $this->$name;
}
}
$obj = new ReflectionClass('person');
$className = $obj->getName();
$Methods = $Properties = array(); $temp_properties = $obj->getProperties();
foreach ($temp_properties as $v) {
if ($v->isPublic()) {
$docblock = $v->getDocComment();
preg_match('/ type\=([a-z_]*) /', $docblock, $matches);
$v->docblock = $matches[0];
}
$Properties[$v->getName()] = $v;
}
$temp_methods = $obj->getMethods();
foreach ($temp_methods as $v) {
if ($v->isPublic()) {
$docblock = $v->getDocComment();
preg_match('/ type\=([a-z_]*)/', $docblock, $matches);
$v->docblock = $matches[0];
}
$Methods[$v->getName()] = $v;
}
var_dump($Methods);
var_dump($Properties);
echo "class {$className} {<br />";
if (is_array($Properties) && ksort($Properties)) {
foreach ($Properties as $k => $v) {
echo '// ', $v->docblock, '<br />';
echo $v->isPublic() ? 'public ' : '', $v->isPrivate() ? 'private ' : '', $v->isProtected() ? 'protected ' : '',
$v->isStatic() ? 'static ' : '';
echo "{$k}<br /><br />";
}
}
echo '<br />';
if (is_array($Methods) && ksort($Methods)) {
foreach ($Methods as $k => $v) {
echo '// ', $v->docblock, '<br />';
echo $v->isPublic() ? 'public ' : '', $v->isPrivate() ? 'private ' : '', $v->isProtected() ? 'protected ' : '',
$v->isStatic() ? 'static ' : '', "function {$k}(";
$func = new ReflectionMethod('person', $k);
if ($func->getNumberOfParameters()) {
foreach ($func->getParameters() as $vv) {
if ($vv->getPosition() != '#0')
echo ', ';
else
echo '';
echo "\${$vv->getName()}";
}
}
echo ') {<br />';
echo '}<br /><br />';
}
}