6

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 中是否有一种方法可以导出或自动生成一个类似的函数引用,能够与 PHP 中的函数引用相同的目的standard.php


编辑:我们正处于创建一个实用程序的早期阶段,一旦它足够远,我们将把它放到 GitHub 上。

我们暂时在 Github 上为它创建了一个空的 repo,所以如果你有兴趣在它上线时获得一份副本,请在此处加注星标。可以在这里找到回购:https ://github.com/ecommunities/Code-Hint-Aggregator


更新:花了一点时间来寻找时间,但上面引用的 GitHub 项目现在已经启动并运行,我们现在可以解析整个项目并输出它的整个命名空间/类/方法结构的映射。仅供参考,它仍处于 Alpha 阶段,但值得一看。:)

4

1 回答 1

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)

我认为这是你想要的。

于 2014-10-22T13:31:58.747 回答