ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

Pronskiy Digest

Pronskiy Digest

الذهاب إلى القناة على Telegram

Вопросы, замечания, предложения: @pronskiy

إظهار المزيد
7 851
المشتركون
-324 ساعات
-137 أيام
-32630 أيام
أرشيف المشاركات
PHP-Дайджест № 179 4 принятых RFC предложения для PHP 8, включая атрибуты (аннотации / декораторы) — голосование по ним заканчивается сегодня в 12 UTC, но результат уже понятен. Также, как всегда, порция полезных инструментов, онлайн-конференции и митапы, видео, подкасты и многое другое. #дайджест https://habr.com/p/500314/

На прошедшем онлайн 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).

У 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, и парочкой от меня лично.

PHP-Дайджест № 178 Composer 2.0 Alpha и другие релизы, 5 новых и одно принятое RFC предложение из PHP Internals, а также обновленные атрибуты на голосовании, порция полезных инструментов, подкасты, интервью, статьи. https://habr.com/p/498246/ #дайджест

PhpStorm 2020.1 Первое мажорное обновление в этом году зарелизили из дома. Под капотом поддержка composer.json, покрытие кода с PCOV и PHPDBG, улучшения для метаданных и вывода типов в PHP, инструменты для PHPUnit, проверка правописания и грамматики и много другого. Возможно, вы уже успели обновиться и посмотреть, что нового. Но если нет, то вот подробный разбор всех изменений на русском: https://habr.com/ru/company/JetBrains/blog/497358/

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 и позволяет не делать никаких реальных изменений, а просто посмотреть в терминале, что будет в итоге. Теперь эту опцию можно будет использовать и для других команд, чтобы проверить установку/изменение пакетов без изменения файлов.

PHP-Дайджест № 177 Расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, подкасты и многое другое. https://habr.com/p/495838/

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!

Ни дня без 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

SymfonyLive Online – сегодня, в 16:00 UTC, Fabien Potencier и Nicolas Grekas в прямом эфире покажут, как проходит опенсорс-работа над Symfony: просмотр и мердж пул-реквестов, ответы на комментарии, участие в дискуссиях вокруг RFC, выпуск релиза Symfony 5.0.6. А уже завтра состоится большой онлайн PHP-митап.

Также единогласно принято предложение об объектной альтернативе для 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

Единогласно принято предложение Никиты Попова о валидации абстрактных методов трейтов. Фатальная ошибка будет сгенерирована в следующих случаях: - нарушение совместимости сигнатур (кол-во аргументов, контравариантность аргументов, ковариантность возвращаемого типа), - несовпадение статичности методов. Также данный RFC разрешает использовать abstract private function, но только в трейтах, так как трейт имеет доступ к приватным методам использующего его класса. В PHP 7 такой код генерирует фатальную ошибку. Будьте внимательны, RFC, очевидно, нарушает обратную совместимость. Однако соблюдать сигнатуру при имплементации абстрактного метода вполне логично, поэтому скорее всего ваш код уже совместим с PHP 8 в этом аспекте. @vudaltsov | https://twitter.com/vudaltsov

Вышла новая мажорная версия популярной библиотеки ramsey/uuid. Из описания следует, что серьезных нарушений обратной совместимости в ней нет, а вот новых интерфейсов и исключений там целый список. Изучаем изменения в документации и обновляемся composer req ramsey/uuid:^4.0. На мой взгляд, самое интересное — это поддержка пока нестандартизированного UUID v6. Новая версия UUID предложена специально для использования в качестве первичного ключа БД и обладает следующими свойствами: - Сортировка по необработанным байтам приводит к последовательности, эквивалентной сортировке по встроенной временной метке. - Встроенное время может быть извлечено для использования в качестве времени создания. - Глобальная уникальность, которая является основным требованием для всех типов UUID. Про отличия версии 6 от версии 1 и другие подробности можно прочитать в IETF черновике. @vudaltsov | https://twitter.com/vudaltsov ________ Карантин имеет свои плюсы. Созвонились с Валентином Удальцовым и решили объединить усилия. Теперь на канале будут иногда появляться новости от Валентина, они будут подписаны как этот пост выше. Кстати, Валентин ведёт свой канал Пых, где пишет о личном опыте разработки на PHP.

Всем привет! В эту субботу планируется виртуальный PHP-митап, в котором поучаствуют ребята из ПК конференции + можно будет по
Всем привет! В эту субботу планируется виртуальный PHP-митап, в котором поучаствуют ребята из ПК конференции + можно будет получить билет на ее онлайновую и оффлайновую части. И не только) ▶️ 6 докладов с трансляцией на Youtube - опыт Skyeng, ManyСhat, iSpring, SimbirSoft, а также небольших студий и независимых разработчиков 🎛 Обсуждения голосом со спикерами - в отдельной видеокомнате после каждого доклада 🍕 Пицца с доставкой на дом за вопросы после каждого доклада 🏆 PHP-викторина с Романом Пронским, необычный розыгрыш билета на PHP Russia, пхпбот и другие интерактивы в перерывах. И все это не выходя из телефона или 💻 ноутбука) Присоединяйся: https://meetups-online.ru/virtual_php_meetup p.s. Спасибо @samdark и @pronskiy за поддержку идеи!

PHP-Дайджест № 176 Обновления PHP и Composer 1.10, переносы конференций, 3 новых RFC предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое. https://habr.com/p/493594/

str_contains() в PHP 8 https://wiki.php.net/rfc/str_contains Не прошло и 25 лет и вот в PHP добавили функцию, которая проверяет, содержится ли строка в другой строке.
str_contains(string $haystack, string $needle) :bool

str_contains("abc", "a"); // true
str_contains("abc", "d"); // false

Конечно, это всего лишь эквивалент strpos($haystack, $needle) !== false но приятная мелочь. В качестве альтернатив для работы со строками уже есть symfony/string или, например, voku/Stringy.

PHP-Дайджест № 175 Релизы Laravel 7 и CodeIgniter 4, атрибуты v2 и другие RFC-предложения из PHP Internals, порция полезных инструментов, видео, подкасты и многое другое. https://habr.com/p/491660/

Stringable Interface https://wiki.php.net/rfc/stringable Предложение от Nicolas Grekas принято. В PHP 8 можно будет использовать union-тип string|Stringable там, где ожидается строка, и передавать классы с __toString(). Интересно, что при этом если в классе реализован магический метод __toString(), то добавлять implements Stringable можно, но необязательно, потому что он неявно будет имплементирован автоматически, прям как в Golang.

Плагин для PhpStorm https://habr.com/ru/company/badoo/blog/490024/ В статье от Badoo подробно о том, как писать свой плагин с подробным разбором реализации кастомной инспекции, а также демо других фишек, которые можно сделать: работа с БД, кодогенерация, добавление статистики от профайлера прямо в код и прочее. И в дополнение несколько полезных плагинов, может какие-то из них вы ещё не пробовали. • Php Inspections (EA Extended) — очень много дополнительных инспекций (архитектура, качество, безопасность, и др). • deep-assoc-completion — дополнение кода для ассоциативных массивов. • Key Promoter X — поможет выучить горячие клавиши. Или хотя бы Alt+Enter вместо клика на лампочку. • 3v4l pl4g1n — быстро запустить выделенный код на 3v4l.org, чтоб сравнить на всех версиях PHP. • String Manipulation — дополнительные действия над строками. • CodeGlance — мини-карта а-ля sublime. • Rainbow Brackets — раскрашивает скобки разными цветами, чтоб быстро находить глазами. #PhpStorm

Laracon Online #конференции #розыгрыш https://laracon.net/ Конференция проходит в виде онлайн-трансляции, так что присоединиться можно из любого места и ехать никуда не нужно и можно смотреть компанией. Начало завтра в 9:00 UTC-5 (первый доклад в 10:00). Тейлор расскажет про Laravel 7, а вся программа тут https://laracon.net/#time-table Разыгрываем 5 билетов. * Победители: Aliaksandr Burshtyn, Roman, Dzianis Yurevich, Ilia Lazarev, Alexey Shapilov