Аннонировать поля, созданные в stdClass? - PullRequest
0 голосов
/ 26 января 2019
class Foo
{
    public function bar(): \stdClass
    {
        $obj = new \stdClass;
        $obj->test = 'test';
        return $obj;
    }
}

При выполнении $foo = new Foo; возможно ли аннотировать Phpdoc, чтобы среда IDE могла автоматически завершаться до $foo->bar()->test?

1 Ответ

0 голосов
/ 27 января 2019

Извините, в настоящее время нет способа документировать ассоциативные массивы или stdClass объекты в phpDocumentor или в пользовательских форматах аннотаций, понятных для NetBeans.

С точки зрения дизайна, возможно, имеет смысл использовать правильные классы:

class Bar
{
    /**
     * @var string
     */
    public $test;
}

class Foo
{
    public function bar(): Bar
    {
        $obj = new Bar;
        $obj->test = 'test';
        return $obj;
    }
}

Если вам вообще не нужна логика, классы могут быть пустыми:

/**
 * @property string $test
 */
class Bar
{
}

В противном случае вы всегда можете обмануть IDE с помощью файла-заглушки, который определяет фиктивный класс, но никогда не выполняется, а затем притворяться, что ваша переменная принадлежит этому классу:

$foo = new Foo;
/* @var $bar Bar *//** @var Bar $bar */
$bar = $foo->bar();
$bar->…

… где /* @var $bar Bar */ для NetBeans 8 и более ранних версий и /** @var Bar $bar */ для NetBeans 10 (и многих других IDE).

...