是否可以为我的应用程序生成代码提示引用,如PHP的standard.php

时间:2014-07-30 19:17:26

标签: php eclipse code-hinting

Eclipse通过将所有PHP函数名称和代码提示放入名为standard.php的文件中并将其作为库(?)与项目相关联来完成PHP函数/方法提示。只需CTRL + Click任何PHP功能来启动它。

standard.php内,对所有PHP函数的参考后都有参考...

/**
 * Find whether the type of a variable is integer
 * @link http://www.php.net/manual/en/function.is-int.php
 * @param var mixed <p>
 * The variable being evaluated.
 * </p>
 * @return bool true if var is an integer,
 * false otherwise.
 */
function is_int ($var) {}

我希望能够为我的程序员提供与我们自己的应用程序类似的东西,这样我就可以限制访问我们的实际软件源代码,但仍然可以给他们带来代码提示支持和文档的好处。

问题:Eclipse中是否有一种方法可以导出或自动生成类似的函数引用,该引用能够与standard.php中的PHP函数引用相同的目的?


编辑:我们已经处于创建实用程序的早期阶段,只要它足够远,我们就会向GitHub提出这个问题。

我们暂时在Github上为它创建了一个空的回购,所以如果你有兴趣在它上升时获得副本,那就明星吧。回购可以在这里找到:https://github.com/ecommunities/Code-Hint-Aggregator


更新:花了一些时间来查找时间,但上面引用的GitHub项目现已启动并运行,我们现在可以解析整个项目并输出一个地图它的整个命名空间/类/方法结构。仅供参考,它还在阿尔法,但它值得一看。 :)

1 个答案:

答案 0 :(得分:2)

您可以使用Zend Framework的反射包,在这里查看它们http://framework.zend.com/apidoc/2.1/namespaces/Zend.Code.html

基本上你需要做一些像

这样的事情
<?php
use Zend\Code\Reflection\FileReflection;
use Zend\Code\Generator\MethodGenerator;

$path ='test/TestClass.php';

include_once $path;

$reflection = new FileReflection($path);

foreach ($reflection->getClasses() as $class) {
    $namespace = $class->getNamespaceName();
    $className = $class->getShortName();
    foreach ($class->getMethods() as $methodReflection) {
        $output = '';

        $method = MethodGenerator::fromReflection($methodReflection);
        $docblock = $method->getDocblock();
        if ($docblock) {
            $output .= $docblock->generate();
        }
        $params = implode(', ', array_map(function($item) {
            return $item->generate();
        }, $method->getParameters()));

        $output .= $namespace . ' ' . $className . '::' . $method->getName() . '(' . $params . ')';
        echo $output;
        echo PHP_EOL . PHP_EOL;
    }
}

当我在一个看起来像这样的测试类上运行它时:

<?php
class TestClass
{
    /**
     * Lorem ipsum dolor sit amet
     *
     * @param string $foo kung-foo
     * @param array $bar  array of mars bars
     *
     * @return void
     */
    public function foo($foo, array $bar)
    {
    }

    public function bar($foo, $bar)
    {
    }
}

我得到了这个输出:

➜  reflection  php bin/parser.php
/**
 * Lorem ipsum dolor sit amet
 *
 * @param string $foo kung-foo
 * @param array $bar  array of mars bars
 *
 * @return void
 *
 */
 TestClass::foo($foo, array $bar)

 TestClass::bar($foo, $bar)

我认为这就是你想要的。