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项目现已启动并运行,我们现在可以解析整个项目并输出一个地图它的整个命名空间/类/方法结构。仅供参考,它还在阿尔法,但它值得一看。 :)
答案 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)
我认为这就是你想要的。