我有一个类,该类在如下方法中包含文件:
在class.php文件中:
class A {
const CONST1 = 5;
/** @var int $a */
var $a = 5;
public function call()
{
include( 'b.php' );
}
public function do_some_magic()
{
// magic stuff...
}
public static function static_func()
{
// some code...
}
}
Run Code Online (Sandbox Code Playgroud)
文件b.php:
<?php
/** @var A $this */
/** @var A self */ // This doesn't work
$this->do_some_magic();
echo '['.$this->a.']';
self::static_func();
echo '['.self::CONST1.']';
Run Code Online (Sandbox Code Playgroud)
我将PhpStorm用作IDE,并在b.php文件中使用,如果要转到变量的定义do_some_magic()或定义,a它将正确地转到文件中的相应方法或变量定义class.php,但是如果要转到常量CONST1的定义或静态方法的定义,static_func()它说“找不到要去的定义”,所以我认为/** @var A self */这不是包含文件中的有效符号。
我的问题是:PhpDoc中有什么方法可以告诉IDE self包含文件中包含什么类型的文件?
我寻找答案,但目前看来,在包含的文件中自动完成的唯一方法是,您必须使用类名进行静态调用。当然,如果您将文件包含在不同的类中并且您希望 self 表示包含该文件的特定类,则这会失败。
所以b.php看起来像:
<?php
/** @var A $this */
/** @var A self */ // This doesn't work
$this->do_some_magic();
echo '['.$this->a.']';
A::static_func();
echo '['.A::CONST1.']';
Run Code Online (Sandbox Code Playgroud)
但是,如果您找到更好的答案,请告诉我。
问候,
安迪