Eclipse IDE:魔术函数访问的私有和受保护属性的代码完成

时间:2013-04-09 20:15:03

标签: php eclipse oop doxygen code-completion

由于它声明了it's ok to answer my own question并且已经找到了一些技巧来实现Eclipse IDE中的代码完成(对于PHP),我想与其他用户分享。

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

问题

如果您使用magic methods,特别是对于属性重载__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帮助我?

2 个答案:

答案 0 :(得分: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()方法,因为它是可见的(因为它是公开的)。

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

答案 1 :(得分:0)

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

/**
 * Test class
 * @property foo $foo
 * @property bar $bar
 */
class myClass {
  private $field_someValue1;
  private $field_someValue2;