Size: a a a

2020 March 24
PHP Digest
Переслано от Алексей Корнеев...
Всем привет! В эту субботу планируется виртуальный PHP-митап, в котором поучаствуют ребята из ПК конференции + можно будет получить билет на ее онлайновую и оффлайновую части. И не только)

▶️ 6 докладов с трансляцией на Youtube - опыт Skyeng, ManyСhat, iSpring, SimbirSoft, а также небольших студий и независимых разработчиков

🎛 Обсуждения голосом со спикерами - в отдельной видеокомнате после каждого доклада

🍕 Пицца с доставкой на дом за вопросы после каждого доклада

🏆 PHP-викторина с Романом Пронским, необычный розыгрыш билета на PHP Russia, пхпбот и другие интерактивы в перерывах.

И все это не выходя из телефона или 💻 ноутбука) Присоединяйся: https://meetups-online.ru/virtual_php_meetup

p.s. Спасибо @samdark и @pronskiy
за поддержку идеи!
источник
PHP Digest
Вышла новая мажорная версия популярной библиотеки ramsey/uuid. Из описания следует, что серьезных нарушений обратной совместимости в ней нет, а вот новых интерфейсов и исключений там целый список.

Изучаем изменения в документации и обновляемся composer req ramsey/uuid:^4.0.

На мой взгляд, самое интересное — это поддержка пока нестандартизированного UUID v6. Новая версия UUID предложена специально для использования в качестве первичного ключа БД и обладает следующими свойствами:

- Сортировка по необработанным байтам приводит к последовательности, эквивалентной сортировке по встроенной временной метке.
- Встроенное время может быть извлечено для использования в качестве времени создания.
- Глобальная уникальность, которая является основным требованием для всех типов UUID.

Про отличия версии 6 от версии 1 и другие подробности можно прочитать в IETF черновике.

@vudaltsov | https://twitter.com/vudaltsov
________

Карантин имеет свои плюсы. Созвонились с Валентином Удальцовым и решили объединить усилия. Теперь на канале будут иногда появляться новости от Валентина, они будут подписаны как этот пост выше.

Кстати, Валентин ведёт свой канал Пых, где пишет о личном опыте разработки на PHP.
источник
2020 March 25
PHP Digest
Единогласно принято предложение Никиты Попова о валидации абстрактных методов трейтов.

Фатальная ошибка будет сгенерирована в следующих случаях:
- нарушение совместимости сигнатур (кол-во аргументов, контравариантность аргументов, ковариантность возвращаемого типа),
- несовпадение статичности методов.

Также данный RFC разрешает использовать abstract private function, но только в трейтах, так как трейт имеет доступ к приватным методам использующего его класса. В PHP 7 такой код генерирует фатальную ошибку.

Будьте внимательны, RFC, очевидно, нарушает обратную совместимость. Однако соблюдать сигнатуру при имплементации абстрактного метода вполне логично, поэтому скорее всего ваш код уже совместим с PHP 8 в этом аспекте.

@vudaltsov | https://twitter.com/vudaltsov
источник
2020 March 26
PHP Digest
Также единогласно принято предложение об объектной альтернативе для token_get_all().

В PHP 8 вместо
foreach (token_get_all($code) as $token) {
   if (is_string($token)) {
       // одиночный символ, например, ;
      continue;
   }
   
   [$pos, $text, $line] = $token;
}

можно будет писать
foreach (PhpToken::getAll($code) as $token) {
   $token->id;
   $token->text;
   $token->line;
   $token->pos;
   $token->is([T_CLASS, T_CONST]);
}

При прочих равных второй вариант потребует меньше памяти и времени. Это значит, что различные парсеры, например, nikic/php-parser, doctrine/annotations или twig/twig в будущем будут работать немного быстрее 😊

Кроме того, класс PhpToken легко расширяется, статический метод getAll() предусмотрительно возвращает static[].

@vudaltsov | https://twitter.com/vudaltsov
источник
2020 March 27
PHP Digest
SymfonyLive Online – сегодня, в 16:00 UTC, Fabien Potencier и Nicolas Grekas в прямом эфире покажут, как проходит опенсорс-работа над Symfony: просмотр и мердж пул-реквестов, ответы на комментарии, участие в дискуссиях вокруг RFC, выпуск релиза Symfony 5.0.6.

А уже завтра состоится большой онлайн PHP-митап.
источник
2020 March 28
PHP Digest
Ни дня без RFC от Никиты!

https://wiki.php.net/rfc/constructor_promotion

Предлагается добавить синтаксический сахар, который позволит объявлять свойства класса прямо в конструкторе. Так же как и в TypeScript.

class Point {
   public function __construct(
       public float $x = 0.0,
       public float $y = 0.0,
       public float $z = 0.0
   ) {}
}

Остается открытым вопрос: стоит ли разрешить оставлять запятую после последнего параметра в сигнатуре функции?

Напомним, оставлять запятую в вызове можно начиная с PHP 7.3.

@vudaltsov | https://twitter.com/vudaltsov
источник
2020 April 01
PHP Digest
Enum в PHP

Тип Enum – одна из самых желанных возможностей в PHP. Есть имитации типа clabs/php-enum, spatie/enum или dbalabka/php-enumeration. Черновику RFC https://wiki.php.net/rfc/enum уже пять лет и есть реализация в Hack. И тем не менее, над тем, чтобы добавить наконец-то фичу в PHP всё ещё никто не работает.

В JetBrains, в рамках традиционной программы летней стажировки, есть две вакансии в команде PhpStorm.

Одна по Автоматизация тестирования рефакторингов для PhpStorm, а вот вторая — First-class enum support in PHP предполагает работу непосредственно под руководством Никиты Попова над реализацией Enum в PHP!

Если у вас есть знакомые студенты (Москва/Питер), которым может быть интересно — поделитесь с ними, пожалуйста, ссылкой (подача заявок до понедельника).
Даешь Enum в PHP!
источник
2020 April 06
PHP Digest
PHP-Дайджест № 177

Расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, подкасты и многое другое.

https://habr.com/p/495838/
источник
2020 April 14
PHP Digest
Composer v2.0-dev

5 апреля исполнилось ровно 9 лет первому коммиту в репозиторий Composer. Готовящийся второй мажорный релиз можно попробовать уже сейчас.

Обзор всех новых фишек можно найти в этой статье https://php.watch/articles/composer-2

А чтобы попробовать Composer v2 прямо сейчас, достаточно выполнить вот такую команду:

composer self-update --snapshot

Улучшена производительность
Благодаря параллельному скачиванию метаданных и файлов пакетов установка без кэша выполняется в два раза быстрее.

Если в системе есть curl, то несколько пакетов/API-вызовов будут загружены одновременно. Кроме того, Composer v2 будет использовать HTTP/2 и переиспользовать TLS-сессии, а также DNS-ответы между HTTP-запросами для ускорения.

Офлайн-режим
Можно будет предотвратить попытки Composer v2 делать любые сетевые запросы. Полезно при запуске тестов или если есть проблемы с соединением. Если имеется composer.lock и пакеты c метаданными доступны в кэше, то Composer v2 сделает всё без дополнительных запросов.

Конечно, для полноценного офлайна нужен satis или private packagist.

Поддержка dry-run для require и remove
Опция --dry-run сейчас доступна только для composer update и позволяет не делать никаких реальных изменений, а просто посмотреть в терминале, что будет в итоге.

Теперь эту опцию можно будет использовать и для других команд, чтобы проверить установку/изменение пакетов без изменения файлов.
источник
2020 April 15
PHP Digest
PhpStorm 2020.1

Первое мажорное обновление в этом году зарелизили из дома. Под капотом поддержка composer.json, покрытие кода с PCOV и PHPDBG, улучшения для метаданных и вывода типов в PHP, инструменты для PHPUnit, проверка правописания и грамматики и много другого.

Возможно, вы уже успели обновиться и посмотреть, что нового. Но если нет, то вот подробный разбор всех изменений на русском:

https://habr.com/ru/company/JetBrains/blog/497358/
источник
2020 April 21
PHP Digest
PHP-Дайджест № 178

Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голосовании, порция полезных инструментов, подкасты, интервью, статьи.

https://habr.com/p/498246/

#дайджест
источник
2020 April 24
PHP Digest
У PHP крутое сообщество. Особенно круто видеть, как разные группы и компании объединяются, чтоб сделать что-то классное вместе.

Во-первых, PHP Russia Online будет бесплатной благодаря Badoo. Если еще не зарегистрировались, то это можно сделать вот тут https://conf.ontico.ru/polls/2901184/onepage.

Доклады на офлайн-конференции не будут пересекаться с онлайн-версией, поэтому подключиться к онлайну можно независимо от того собираетесь на офлайн или нет.

Во-вторых, в субботу в 11:50 UTC+3 начнется онлайн PHP-митап организованный совместно Skyeng и минским сообществом PHPofBy. Ссылка на трансляцию https://www.youtube.com/watch?v=se3F83O0ZiY.

На нем, как и в прошлый раз, я проведу викторину с вопросами по PHP от Пети Мязина из Пятиминутки PHP, Skyeng, и парочкой от меня лично.
источник
2020 April 29
PHP Digest
На прошедшем онлайн PHP-митапе в викторине было два каверзных вопроса, на которые многие ответили неправильно.

Можно ли назвать метод "function"?

class PhpQuiz
{
   public function function() { }
}

Да, можно. Более того, благодаря вот этому RFC Context Sensitive Lexer, начиная с PHP 7.0 методы и константы класса можно называть ключевыми словами.

Но PHP был бы не PHP, если б в нем не было забавного бага: если метод в трейте называется 'namespace', то для него не получится использовать алиас.

И второй вопрос.

Что выведет var_dump(0.1 + 0.2 === 0.3) ?

Ответ: bool(false)

И это не особенность PHP, в чем можно убедиться проверив аналогичный пример в любом другом языке программирования. Подробнее вот здесь http://0.30000000000000004.com/
Именно поэтому хранить денежные значения в базе данных в поле типа float/double очень плохая идея. (Не только в базе, а вообще использовать для денежных значений float).
источник
2020 May 04
PHP Digest
PHP-Дайджест № 179

4 принятых RFC предложения для PHP 8, включая атрибуты (аннотации / декораторы) — голосование по ним заканчивается сегодня в 12 UTC, но результат уже понятен.
Также, как всегда, порция полезных инструментов, онлайн-конференции и митапы, видео, подкасты и многое другое. #дайджест

https://habr.com/p/500314/
источник
2020 May 06
PHP Digest
#RFC Именованные аргументы функций

#RFC Именованные аргументы функций

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"])>>

Сообщество разделилось: некоторые считают, что это может создать проблемы для мейнтейнеров пакетов, потому что просто так поменять имя параметра без поломки обратной совместимости нельзя.
источник
2020 May 12
PHP Digest
Принят #RFC о приведении чисел с плавающей точкой к строке без учета локали.

#RFC о приведении чисел с плавающей точкой к строке без учета локали.

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
источник
2020 May 13
PHP Digest
PHP Russia Online – Live 🔴

Конференция уже в эфире. Ссылки на трансляции:

С синхронным переводом на русский
https://www.youtube.com/watch?v=zYWDlaOOFTU

Оригинальная на английском
https://www.youtube.com/watch?v=cQZBS3u3SeU
источник
2020 May 18
PHP Digest
PHP-Дайджест № 180
2 принятых, 2 отклоненных и 6 новых RFC предложений из PHP Internals, обзор PHP 8, порция полезных инструментов, онлайн мероприятия, видео, подкасты и многое другое. #дайджест

https://habr.com/p/502442/
источник
2020 May 22
PHP Digest
Принят RFC, который добавит тип mixed в PHP 8

Есть два основных аргумента в его пользу:
- mixed сигнализирует о том, что тип не забыли указать, просто он не может быть уточнён,
- mixed часто фигурирует в документации PHP.

Смешанный тип эквивалентен объединению типов null|bool|int|float|string|array|object|callable|resource. При наследовании mixed по общему правилу может  использоваться в следующих ситуациях:

abstract class A
{
   abstract public function bar(string $arg): mixed;
}

final class B extends A
{
   /**
    * тип аргумента расширен в подклассе
    * тип возвращаемого значения сужен в подклассе
    */
   public function bar(mixed $arg): int
   {...}
}

Тип ?mixed считается невалидным и избыточным: mixed по определению включает null. Код с таким типом сгенерирует фатальную ошибку.

О других нюансах использования смешанного типа читайте в RFC: https://wiki.php.net/rfc/mixed_type_v2.

@vudaltsov | https://twitter.com/vudaltsov
источник
2020 May 27
PHP Digest
На ближайших выходных сразу два крутых PHP-мероприятия. Ребята уже скоординировались и больше таких коллизий не будет. Ну а в этот раз можно насладиться выбором.

Про 3-й виртуальный PHP-митап вы наверняка уже слышали. Но если вдруг нет, то в субботу, 30 мая, будет 5 докладов, включая историю от того самого слепого разработчика, и зум с крутыми гостями.

Кроме того, 30 и 31 мая будет проходить PHP fwdays online. Программа вот тут https://fwdays.com/en/event/php-fwdays-2020#program-event.

Сам жду доклад Макса Рафалко (Infection) о принципах проектирования пакетов. Уж очень понравился его документ о выделении пакета из Infection https://github.com/infection/infection/issues/922.

Организаторы PHP fwdays предоставили пару билетов для розыгрыша — он в следующем сообщении.
источник