#RFC Именованные аргументы функций
https://wiki.php.net/rfc/named_params
Никита идет по списку, предложенному Ларри Гарфильдом, и выдвигает на обсуждение обновленный и проработанный документ.
Именованные аргументы позволяют передавать аргументы в функцию на основе имени параметра, а не его позиции. Причем можно комбинировать именованные и позиционные.
Пропуск дефолтных значений:
https://wiki.php.net/rfc/named_params
Никита идет по списку, предложенному Ларри Гарфильдом, и выдвигает на обсуждение обновленный и проработанный документ.
Именованные аргументы позволяют передавать аргументы в функцию на основе имени параметра, а не его позиции. Причем можно комбинировать именованные и позиционные.
Пропуск дефолтных значений:
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401 , ini_get("default_charset"), false);станет:
htmlspecialchars($string, double_encode: false);Еще это важно для атрибутов, так как сейчас с ними вот такой PHPDoc:
/**выглядел бы вот так:
* @Route("/api/posts/{id}", methods={"GET","HEAD"})
*/
<<Route("/api/posts/{id}", ["methods" => ["GET", "HEAD"]])>>А с этим RFC будет красиво:
<<Route("/api/posts/{id}", methods: ["GET", "HEAD"])>>Сообщество разделилось: некоторые считают, что это может создать проблемы для мейнтейнеров пакетов, потому что просто так поменять имя параметра без поломки обратной совместимости нельзя.
Принят #RFC о приведении чисел с плавающей точкой к строке без учета локали.
https://wiki.php.net/rfc/locale_independent_float_to_string
Сейчас выражение
В PHP 8 в результате принятия предложения приведение чисел с плавающей точкой будет работать одинаково во всех локалях.
@vudaltsov | https://twitter.com/vudaltsov
https://wiki.php.net/rfc/locale_independent_float_to_string
Сейчас выражение
(string) 3.14
возвращает различный результат для, например, английского и русского языков: https://3v4l.org/MaUIT. Это может приводить к неприятным ошибкам в мультиязычных системах (интересные примеры в RFC).В PHP 8 в результате принятия предложения приведение чисел с плавающей точкой будет работать одинаково во всех локалях.
setlocale(LC_ALL, 'ru_RU');Для приведения с учетом локали можно пользоваться функциями семейства
$f = 3.14;
(string) $f; // 3,14 would become 3.14
strval($f); // 3,14 would become 3.14
var_dump($f); // float(3,14) becomes float(3.14)
settype($f, "string"); // 3,14 would become 3.14
implode([$f]); // 3,14 would become 3.14
printf
со спецификатором f: sprintf('%f', 3.14)
.@vudaltsov | https://twitter.com/vudaltsov
#RFC И снова о синтаксисе атрибутов в PHP 8
https://wiki.php.net/rfc/shorter_attribute_syntax_change
Сначала Benjamin Eberlei подготовил детальный RFC по атрибутам и предложил синтаксис
Предложение прошло, но позже после споров предложен другой RFC с тремя вариантами синтаксиса на голосовании:
Победил вариант
И вот теперь Derick Rethans автор Xdebug написал письмо в Internals, что синтаксис
▪️ Конфликт с парсером.
▪️ Большая вероятность проблем с парсингом в будущем.
▪️ Отсутствие символа в конце атрибута (с ним проще искать и проще для инструментов вроде PHPCS).
▪️ Синтаксис не используется ни в одном другом языке.
▪️ Оператор
По следам этого письма и подготовили новый RFC, который предлагает использовать синтаксис
https://wiki.php.net/rfc/shorter_attribute_syntax_change
Сначала Benjamin Eberlei подготовил детальный RFC по атрибутам и предложил синтаксис
<<Attribute>>
.Предложение прошло, но позже после споров предложен другой RFC с тремя вариантами синтаксиса на голосовании:
<<>>
, #[]
и @@
.Победил вариант
@@
, видимо, как максимально близкий к тегам PHPDoc и аннотациям в Java. Но автор этого RFC умолчал о проблеме с парсером и о хаке, который он применил, чтоб обойти проблему.И вот теперь Derick Rethans автор Xdebug написал письмо в Internals, что синтаксис
@@
ужасен вот почему:▪️ Конфликт с парсером.
▪️ Большая вероятность проблем с парсингом в будущем.
▪️ Отсутствие символа в конце атрибута (с ним проще искать и проще для инструментов вроде PHPCS).
▪️ Синтаксис не используется ни в одном другом языке.
▪️ Оператор
@
никогда не уйдет из PHP, а значит и атрибуты из @@
не станут @
.По следам этого письма и подготовили новый RFC, который предлагает использовать синтаксис
#[ ]
как в Rust.