是否可以为我的应用程序生成类似于PHP的standard.php的代码提示参考?

6
Eclipse通过将所有PHP函数名称和代码提示放入一个名为standard.php的文件中,并将其关联到项目中作为库(?), 实现了PHP函数/方法提示。只需CTRL + 点击任何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 项目现已运行,并且我们现在可以解析整个项目并输出其完整命名空间 / 类 / 方法结构的映射。FYI,它仍处于 Alpha 阶段,但值得一看。 :)

大多数集成开发环境(IDE)都提供了一些快捷代码来为您生成PHPDocumentor的存根,尽管您仍然需要自己填写详细信息 - 如果您正在使用Eclipse,请查看这个链接,即使它现在有点过时。 - Mark Baker
1
相反地,虽然PHPDocumentor本身只是使用这些注释来构建文档,但正是这些同样的注释(通常称为docblocks)被大多数现代IDE用于自动完成和显示函数/方法参数。 - Mark Baker
2
将光标放置在您的函数、类或其他内容上方,键入“/**”,然后按“enter”键,Eclipse应该为您生成一个存根docblock;然后您可以在注释中写入“@ blocks”,使用“@”后跟“ctrl+space”来获取标签的自动完成提示。 - Mark Baker
抱歉,是的...我完全误解了。 - Mark Baker
我理解你的问题,但为什么不创建自己的 standard.php 文件呢?现在问题来了,如何让它自动完成或者让 Eclipse 为你完成,但为什么不创建一个 PHP 脚本来完成这个任务,再连接一个数据库的管理界面(可以是叫做 MyAppDoc 的 API 调用),只要你调用 API 来记录你想要的代码文档,就会写入那个文件? - Ares Draguna
显示剩余3条评论
1个回答

2
您可以使用Zend Framework的反射包,点击这里查看它们。

基本上,您需要执行以下操作:

<?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)

我认为这正是你想要的。

这正是我们正在寻找的,而且时间非常完美,因为我正准备重新审视它,它已经有一段时间没有被列入优先事项列表了。我将把它打包成一个目录树迭代器,并将其放入我在帖子中提到的仓库中,如果您感兴趣,我很乐意邀请您加入,但肯定会引用您的贡献!非常感谢您花时间解决这个问题! - oucil
谢谢伙计!总是乐于帮助社区。 - motanelu
嘿,好久不见,但终于找到时间让它运行起来了。你的代码帮了大忙,我在项目的Aggregator.php类文件中标注了你和这个SO问题的贡献。输出结果还不太对,所以我稍微修改了一下,以获取正确的命名空间/类/方法嵌套,但基本意图仍然存在。在这里查看项目:https://github.com/ecommunities/Code-Hint-Aggregator - oucil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接