В языке PHP многие фичи, которые сегодня кажутся очевидными, сначала не проходили голосование RFC. Иногда не хватало буквально нескольких голосов.
Вот несколько показательных примеров.
---
1️⃣ Typed Properties (2016)
Сегодня это нормальная часть языка:
class User {
public int $id;
}
Но первая версия RFC провалилась.
Результат голосования:
Yes: 24
No: 17
На первый взгляд — победа.
Но для этого RFC требовалось 2/3 голосов.
Через несколько лет предложение переработали — и Typed Properties появились в PHP 7.4.
Сегодня это одна из самых используемых возможностей языка.
---
2️⃣ Scalar Type Hints
До PHP 7 нельзя было писать:
function sum(int $a, int $b)
Можно было типизировать только:
* array
* callable
* классы
Первая версия RFC по scalar types провалилась буквально на грани.
Типичный результат одного из голосований:
Yes: 31
No: 25
До порога 2/3 голосов опять немного не дотянули.
В итоге появился компромисс:
declare(strict_types=1);
И scalar types всё-таки попали в PHP 7.0.
---
3️⃣ Generics
Одна из самых ожидаемых фич PHP до сих пор.
Идея:
class Collection<T> {
public function add(T $item) {}
}
Generics дают:
• сильную типизацию
• безопасные коллекции
• лучшее автодополнение IDE
Главная проблема — сложность реализации.
Generics требуют серьёзных изменений:
• type system
• runtime
• reflection
• opcache
Поэтому обсуждение этой фичи продолжается уже много лет.
---
4️⃣ Named Arguments
Сегодня можно писать так:
setcookie(
name: "test",
expires: time() + 3600
);
Но первая версия RFC была отклонена.
Разработчики опасались:
• ломать старые API
• сложности в call stack
• несовместимости с variadic функциями
После переработки RFC всё-таки приняли, и Named Arguments появились в PHP 8.0.
---
💡 Интересный факт
В internals есть шутка:
> RFC не умирает — он просто уходит на переписывание.
Большинство крупных фич PHP проходят примерно такой путь:
1️⃣ первая версия RFC проваливается
2️⃣ идею перерабатывают
3️⃣ через несколько лет она всё-таки попадает в язык