27cm
@27cm
TODO: Написать статус

Как научить PhpStorm понимать, что поля и методы используются динамически?

Если переменная, поле или метод в классе используются динамически (это как?), то PhpStorm не сможет никак это определить, в результате не работают например такие функции как Find usages для поля в классе.

Кусок кода для примера:
<?php

class Example {
    public $property1;
    public $property2;
    public $property3;
}

$obj = new Example();

// Случайным образом зададим значение
// в одном из трех полей (property1 / property2 / property3)
$name = 'property' . rand(1, 3);
$obj->{$name} = 'value';


Если затем сделать Find usages для любого из свойств класса Example, то PhpStorm ничего не найдет.
Может есть какой-то легальный способ, аннотация или хак, чтобы научить его этому?
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
27cm
@27cm Автор вопроса
TODO: Написать статус
Вариант 1. Перечислить все свойства в @see комментарии
<?php

class Example {
    public $property1;
    public $property2;
    public $property3;
}

$obj = new Example();

/** @see Example::property1 */
/** @see Example::property2 */
/** @see Example::property3 */
$name = 'property' . rand(1, 3);
$obj->{$name} = 'value';


Вариант 2. Использовать функцию, которая ничего не делает.
<?php

function ide_usage(...$args) {
    // Функция ничего не делает, используется для тех редких случаев,
    // когда нужно показать IDE, что тут неявно используется переменная, свойство или метод
}

class Example {
    public $property1;
    public $property2;
    public $property3;
}

$obj = new Example();

ide_usage($obj->property1, $obj->property2, $obj->property3);

$name = 'property' . rand(1, 3);
$obj->{$name} = 'value';
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы