0

正如它所说,可以回答我自己的问题并找到一些技巧来在 Eclipse IDE(用于 PHP)中实现代码完成,我想与其他用户分享。

我在这里找到了一些解决方案,但不知何故,我无法使 doxygen 与这些声明的属性一起正常工作,我找到了一些解决方法。

问题

如果您使用魔术方法,特别是对于属性重载__get(),,__set()(可能它也涉及__call()__invoke()),则存在一个问题,即属性名称以某种方式定义为动态(作为变量变量)并且在任何范围内都不可见。这是可能的,因为它们的名称作为字符串传递并且可以以任何方式进行操作。

所以不可能在代码完成中拥有那些神奇地访问的属性(或方法),在我的情况下(不知道为什么,但没关系),在类的生成文档中。

(代码完成是指编辑器通过显示所有可能的属性和方法来帮助程序员,从而避免一些错误。)

考虑我们有以下类:

/**
 * Test class
 */
class myClass {
  private $field_someValue1;
  private $field_someValue2;

  /**
   * Magic method getter for hidden properties.
   * @param string $name
   * @return mixed
   */
  public function __get($name){
    switch($name){
      case 'foo': return $this->$field_someValue1; break;
      case 'bar': return $this->$field_someValue2; break;
      default:
        // handle non-existing property error here
    }
  }

  /**
   * Simply do nothing, but be some public part of the class.
   * @return void
   */
  public function doNothing(){
  }
}

$a = new myClass();

因此,在我的代码中,当我键入时$a->,编辑器应该通过提示我的对象有两个属性来帮助我:foobar. 当然它不能显示$field_someValue1$field_someValue2因为它们是私人的。

如何让 Eclipse 帮助我?

4

2 回答 2

0

解决方案

我的解决方案(或者更确切地说是解决方法)是创建一个新文件,该文件将包含与项目主文件中相同的类名。我为此创建了一个特殊的目录。

在那里,我可以轻松地声明我通过__get()(等) 访问的所有隐藏属性,如下所示__set()__isset()

class myClass {
 /**
  * Some accessible hidden property.
  * @var string $foo
  */
  public $foo;

 /**
  * Another accessible hidden property.
  * @var bool $bar
  */
  public $bar;
}

就这样。

这使得 Eclipse 允许通过提示类的属性来帮助我(它结合了两个同名类的所有属性),并且还为 doxygen 提供了适当的文档信息。

问题是 doxygen 将在其“文件”部分生成此文件;如果你不在乎,没关系。

请注意,在我的“文档文件”中,我不需要重新键入该doNothing()方法,因为它是可见的(因为它是公开的)。

希望这对任何人都有帮助。

于 2013-04-09T20:16:05.940 回答
0

更优雅的是在同一个类文件中使用 phpdoc @property:

/**
 * Test class
 * @property foo $foo
 * @property bar $bar
 */
class myClass {
  private $field_someValue1;
  private $field_someValue2;
于 2013-05-27T21:14:33.250 回答