TGViewer
PHP Fart Time PHP Fart Time @php_fart · 1.95K subscribers
Post #112 1.48K
#Article #Типизация

Я уже ранее публиковал заметку про любопытное отличие Promoted Properties от обычных свойств в кишках #PHP.

Promoted Properties от того и Promoted, что очень неплохо продвигались в плане маркетинга.


Например, вот такая портянка:
class CustomerDTO
{
public string $name;

public string $email;

public DateTimeImmutable $birth_date;

public function __construct(
string $name,
string $email,
DateTimeImmutable $birth_date
) {
$this->name = $name;
$this->email = $email;
$this->birth_date = $birth_date;
}
}


превращается в такую:

class CustomerDTO
{
public function __construct(
public string $name,
public string $email,
public DateTimeImmutable $birth_date,
) {}
}


Вау! Круто!
Но не раскрыта тема комментариев.
Если вы не пишете комментарии в коде, то вам, в прочем, без разницы 😑 но мне вот приходится 😫

Как правило, если требуется указать более точный "псалмовый" тип, то он перемещается из аннотации @var в аннотацию @param над конструктором, поэтому иногда получается такое говно, в котором нужный тебе параметр пойти найди.
А т.к. я обычно пишу непонятные тулзы, которые хер пойми как работают, то в комментариях часто нужен не только текст, но и вставки кода, дополнительные аннотации типа @internal, @note, @since, @see, @link.

И хорошего решения тут нет.

👉 Писать портянку под @property — тем всратее, чем больше комментариев и параметров.

👉 Писать типы и комментарии непосредственно над параметром — всрато.

class CustomerDTO
{
public function __construct(
/**
* @var non-empty-string Comment here
* Example here
*/
public readonly string $name,
//...
) {}
}


👉 Не использовать Promoted Properties и дублировать комментарий — всрато, но есть исключения (если свойство публичное, а конструктор internal, то в конструкторе можно обойтись только типом).
И даже если сделаешь красиво, то всё-равно потом придёт какой-нибудь умник с ректором или CS фиксером и запромоутит разом все параметры 🚽
Telegram PHP Fart Time #Article #Типизация #php Всем нравятся Constructor Property Promotion, не так ли? final class Foo { public function __construct( public bool $bar = false, public array $baz = [], ) { } } ☝️ эти фрагменты кода эквивалентны 👇 final…
More from @php_fart
  1. Sep 24, 2026#ТоксикСреда в четверг. PHPStorm в следующем году будет спонсировать Larabelles*. * Larabe…
  2. Sep 9, 2026Попрошу перенести старт на конец сентября этого года. Лишь бы не жрать лимон 🍋
  3. Sep 9, 2026Если по моему промокоду придёт 50 фартанов, то я сожру лимон в прямом эфире перед докладом…
  4. Sep 9, 2026А у меня для вас вот такой промокод на Пыхник: PHPFART-26. Приходите смотреть, как я облаж…
  5. Sep 8, 2026Кстати, Роман и из JetBrains ушёл. Так что этот тред посвящён оплакиванию PHPStorm. Хороша…
  6. Sep 3, 2026Post #380
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →