由于它声明了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->
的代码中,编辑器应该通过暗示我的对象有两个属性来帮助我:foo
和bar
。当然,它无法显示$field_someValue1
和$field_someValue2
,因为它们是私有的。
如何让Eclipse帮助我?
答案 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;