Будущее развитие PHP
https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-language-evolution.mdНикита опубликовал черновик RFC с предложением установить механизм введения в язык новых глобальных или ломающих обратную совместимость фич. И рассмотрел возможные пути решения:
1. Новый язык (P++)
При всех своих недостатках, одно из преимуществ тут в том, что можно делать совершенно радикальные изменения. Например, убрать
$
из переменных. Но мы помним судьбу
Perl/Raku.
2. Editions (редакции/издания)
Идея позаимствована
из Rust, в разработку которого Никита тоже вовлечён.
По сути, это набор обратно-несовместимых изменений, объединенных под одним именем. Такой вариант интересен как с технической так и с маркетинговой точки зрения.
3. Директивы declare на каждую фичу
То есть на каждое крупное изменение вводить отдельную директиву по типу
strict_types
.
___
Поскольку против нового языка уже неофициально
проголосовали и единогласно отмели идею, то дальше Никита рассматривает технические аспекты реализации единшов/директив.
Варианты тут такие:
• Текущая реализация с объявлениями в каждом файле
declare(strict_types=1)
или в случае едишнов
declare(edition=2020)
• Новый открывающий тег
Например, для едишнов:
<?php2020
• Указание директив для пространств имён (
RFC)
namespace_declare('Vendor\Lib', [
'strict_types' => 1,
'no_dynamic_properties' => 1,
// ...
]);
• Ввести понятие пакета в PHP
Прототип этого варианта оформлен в виде
пул-реквеста.
Пакет надо будет явно объявлять в каждом файле.
<?php
package "nikic/php-parser";
namespace PhpParser\Node;
• Что-то на основе файловой системы
Например добавлять файл
.package.php
в корне пакета, который будет содержать нужную метаинформацию.
В конце Никита подводит
выводу, что оптимальный вариант — это
едишны + declare директивы в каждом файле.