Хочу с помощью phpdoc ссылаться на свойства/константы класса.

ChAk

Новичок
Я храню данные в объектах. Как-то так
PHP:
class User {
  public $id;
  public $name;
}
Иногда я вынужден использовать их как-то так
PHP:
$user = new User();
$property = 'id';
echo $user->{$property};
Конечно не так, а немного хитрее, ну суть тут в том, что ideтеряет связь между местом где свойство объявлено и местом где оно использовано. И в итоге, когда мне нужно переименовать свойство найти все места их использований становиться очень трудно.

Пока приходиться использовать костыль. Под объявлением классом добавляю строки вида
PHP:
if (false) {class User_id{}};
А в местах где свойство используется неявно добавляю строку вроде
PHP:
/** @var User_id */
А хотелось бы как-то так
PHP:
/** @uses User::$id */
Но к сожалению, в phpstorm так не работает.
Есть phpdoc решение для моей проблемы в phpstorrm или все таки нет? Для свойств или хотя бы для констант.
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
Вы пытаетесь лечить зубы не через то отверстие. У вас есть объект с внешним интерфесом, оставьте его как он есть, воспользуйтесь инкопсуляцией и меняйте только внутренее состояние. Мы можете поле мепить внутри куда угодно.
PHP:
/**
* @property $id
* @property $uid
*/
class User {
    protected $id;
    protected $map = [ 'id' => 'uid', 'uid' => 'uid'];
    public function __get($key) {
        $keyInMap = $this->map[$key];
        return $this->{$keyInMap};
    }
}
$user = new User();
assert($user->id === $user->uid);
 
  • Like
Реакции: ChAk

ChAk

Новичок
AmdY, вариант, но хотелось бы именно phpdoc это было бы на много проще и удобнее
 

ChAk

Новичок
AmdY, к сожалению не поможет если я захочу это поле удалить, а такое тоже бывает. Это ведь просто структура данных это не настоящий объект, просто как ассоциативным массив. Объект удобнее так как кодкомплит и тп
 

hell0w0rd

Продвинутый новичок
ты хочешь и рыбку съесть и косточкой не подавиться. Либо полностью описывай поведение модели, либо мерись в отсутствием автокомплита
 
  • Like
Реакции: WMix
Сверху