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

解决方案 »

  1.   

    <?php
    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 />';
            }
        }