Size: a a a

2019 July 29
PHP Digest
PHP-Дайджест № 161
(15 – 29 июля 2019)

https://habr.com/p/461669/

PHP 7.4.0 beta 1, PhpStorm 2019.2, PSR-12, обзор RFC предложений из PHP Internals, новости с Laracon US, подкасты, порция полезных инструментов, и многое другое.
источник
2019 July 30
PHP Digest
Обычно в подкасте выходит сокращённая версия дайджеста с основными моментами. На этот раз она скорее расширенная:  подробнее рассмотрены RFC, а также Symfony Cloud и Laravel Vapor.

https://soundcloud.com/5minphp/episode58
источник
2019 August 09
PHP Digest
Пробельные символы в именах функций

PSR-1 определяет, что имена методов должны быть объявлены в camelCase. А вот что PSR-стандарты никак не регламентируют, это какие символы можно использовать в именах. Обычно для именования используются ASCII-символы, но и вот такой код будет вполне соответствовать PSR-1,2,12 (хотя PHP_CоdeSniffer его и не пропустит):

function имяФункции()
{
   echo 'Привет, мир!';
}
имяФункции();

А PHP позволяет использовать любые символы, хоть кириллицу, хоть emoji:
https://github.com/Stichoza/phemoji

📅('Y-m-d', ⏰() + 🎰(1000, 2000)); 
// date('Y-m-d', time() + rand(1000, 2000));


Или можно пробельные символы:

function hello World()
{
   echo 'Hello world!';
}
hello World();

Или даже пробел нулевой длины:
https://twitter.com/pgl/status/1155828747481825281

function ()
{
   echo 'Zero-width space function name 🤯';
}
();

Копировать отсюда: https://gist.github.com/pronskiy/47adea5952b7af1574c673403b054f28

На идее пробельного символа нулевой длины даже сделана мини-библиотека, которая имитирует синтаксис структуры Tuple из Python https://github.com/p810/tuple/

$tuple =  ('hello', 'world');
var_dump($tuple); // => p810\Tuple\Tuple#3 (2) {...}

Шутки шутками, а вот что касается обычных пробелов, то есть старая интересная идея использовать их в именовании тестовых методов:
https://mnapoli.fr/using-non-breakable-spaces-in-test-method-names/

public function test a user can add a product to a wishlist()
{
   // ...
}

По опыту автора, тогда объявление выглядит как естественное предложение и тест легче воспринимать и написать. Ну а поскольку вызывать их явно обычно не приходится, то особых неудобств это не должно доставлять.
источник
2019 August 12
PHP Digest
PHP-Дайджест № 162
(1 – 12 августа 2019)

https://habr.com/p/463279/

О будущем PHP: P++ или PHP2020, принят PSR-12, PHP 7.4 beta 2, Slim 4, и другие релизы, порция полезных инструментов, и многое другое!
источник
PHP Digest
Сегодня в эфире сразу два подкаста

Во-первых, это выпуск Пятиминутки PHP по следам PHP-Дайджеста, в котором я подробнее рассказываю о том, что происходило в PHP Internals за последнее время и о радикальном предложении переписать PHP без оглядки на обратную совместимость, под кодовым названием P++.

https://soundcloud.com/5minphp/episode61

А во-вторых, это совместный выпуск SDCast + Пятиминутка PHP, где Костя Буркалев и Пётр Мязин общаются с разработчиками из команды PhpStorm Кириллом Смеловым и Максимом Колмаковым и обсуждают, как устроена разработка, команда, что есть нового!

https://sdcast.ksdaemon.ru/2019/08/sdcast-107/
источник
2019 August 26
PHP Digest
PHP-Дайджест № 163
(12 – 26 августа 2019)

https://habr.com/p/464971/

PHP 7.4.0 beta 4, о судьбе P++, видео, подкасты, анонсы митапов и конференций, порция полезных инструментов, и многое другое!
источник
2019 September 03
PHP Digest
В PHP 8 по умолчанию уровень ошибок будет установлен в E_ALL
вместо текущего:
E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED.

https://twitter.com/nikita_ppv/status/1168492040046415878
https://github.com/php/php-src/pull/4659/files
источник
2019 September 04
PHP Digest
Union Types v2

https://github.com/nikic/php-rfcs/blob/union-types/rfcs/0000-union-types-v2.md

Никита Попов разразился ещё одним монументальным RFC.
Предлагается ввести объединённые типы – это значит, что переменная может принимать один из перечисленных типов. Де-факто объединённые типы давно используются в PHPDoc, но теперь они действительно будут проверяться самим интерпретатором.

Предлагаемый синтаксис T1|T2|... может быть использованы везде, где типы можно указывать сейчас:

class Number {
   private int|float $number;

   public function setNumber(int|float $number): void {
       $this->number = $number;
   }

   public function getNumber(): int|float {
       return $this->number;
   }
}

______________________________________

Также примечательно, что этот RFC в качестве эксперимента оформлен как пул-реквест https://github.com/php/php-rfcs/pull/1 в репозиторий php/php-rfcs. Если такой подход приживётся, то в дальнейшем обсуждения RFC будут проходить на Гитхабе. Финальное голосование всё равно будет проходить на wiki.php.net.
источник
2019 September 09
PHP Digest
PHP-Дайджест № 164
(27 августа – 9 сентября 2019)

https://habr.com/p/466671/

PHP 7.4.0 RC1, Laravel 6, Monolog 2 и другие релизы, Union Types, Object Initializer и прочие новости из PHP Internals, полезные инструменты, пачка подкастов и многое другое!
источник
2019 September 27
PHP Digest
PhpStorm 2019.3 EAP

https://blog.jetbrains.com/phpstorm/2019/09/phpstorm-2019-3-early-access-program-is-now-open/

Пока я в отпуске, и новостей в канале не густо, но скоро вернусь с интересными сюрпризами.

А тем временем запустили программу раннего доступа для третьего мажорного релиза PhpStorm в этом году.

В этот раз фокус на качестве и производительности. Поэтому вся команда IntelliJ Platform, на которой базируется PhpStorm и другие IDE от JetBrains, занимается фиксами багов, проблем юзабилити и перформанса. В релиз ноутах можно увидеть много исправленных старых проблем. Правда, это значит, что новых фич будет меньше.

Из того, что можно пощупать уже сейчас:
– Поддержка всех фич PHP 7.4 (помимо типизированных свойств), с инспекциями и квик-фиксами
– Подсветка в PHPDoc
– Выбор интерпретатора для run-конфигураций
– Множество мелких улучшений для PHP

Отзывы можно писать мне @prnsk, в твиттер phpstorm (мы его читаем и отвечаем), или в блоге PhpStorm.

По традиции билды EAP можно использовать бесплатно.
источник
2019 October 07
PHP Digest
PHP-Дайджест № 165

PHP 7.4.0 RC3, поддержка Composer-зависимостей на GitHub, обновление стандартов PSR, RFC предложения из PHP Internals и о координации проекта PHP, порция полезных инструментов, подкасты, митапы, и многое другое!

https://habr.com/p/470373/
источник
2019 October 21
PHP Digest
PHP-Дайджест № 166

PHP 7.4 RC4 и другие релизы, новости из PHP Internals, порция полезных инструментов, стримы, видео с конференций, подкасты и многое другое!

https://habr.com/p/472306/
источник
2019 October 30
PHP Digest
Свежие подкасты про PHP

SDCast #109
с Антоном Титовым, автором RoadRunner и Cycle ORM.
https://sdcast.ksdaemon.ru/2019/10/sdcast-109/

The Undercover Elephpant с Derick Rethans автором Xdebug о том как устроена сборка мусора в PHP.
https://undercover-elephpant.com/episodes/what-is-garbage-collection-in-php-and-how-do-you-make-the-most-of-it-with-derick-rethans

Laravel Snippet – подкаст Тейлора. В последних эпизодах он делится советами о том, как строить бизнес на опенсорсе. Если ещё не слушали, рекомендую.
https://share.transistor.fm/s/bc9c3206

Пятиминутка PHP: DDD #7 — Парадигмы моделирования и многоуровневая архитектура – продолжение серии выпусков по знаменитой книге Эрика Эванса Domain-Drived Design.
https://5minphp.ru/episode71/
источник
2019 October 31
PHP Digest
Помните язык Perl?  

Совсем недавно после долгих споров сообщество Perl приняло решение переименовать Perl 6 в Raku.

Дело в том, что Perl 6 не стал продолжением Perl 5, как ожидалось изначально, а превратился в отдельный язык, для которого так и не было подготовлено инструментария по миграции с Perl 5. В итоге под одним именем Perl существовало два параллельно развивающихся самостоятельных языка, не совместимых друг с другом и имеющих свои сообщества разработчиков.

Всё это очень напоминает историю с P++, которая, к счастью, не получила продолжения, и пока оставила след лишь в виде стикеров и футболок. Понаблюдаем, как будет развиваться судьба Perl/Raku.
источник
2019 November 04
PHP Digest
PHP-Дайджест № 167

PHP 7.4.0 RC5, Xdebug 2.8, критическая уязвимость в PHP-FPM, новости из PHP Internals, порция полезных инструментов, подкасты, стримы и многое другое!

https://habr.com/p/474380/
источник
2019 November 05
PHP Digest
[RFC] Weak maps

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

В PHP 7.4 была добавлена поддержка слабых ссылок через специальный класс WeakReference.
Развивая идею дальше, для PHP 8 Никита предлагает добавить коллекцию WeakMap, которая, по сути, будет аналогом SplObjectStorage, то есть множество, в котором ключами выступают объекты. Изюминка в том, что если объект, который был ключом, перестаёт существовать (на него нет других ссылок), то он автоматически пропадает и из коллекции WeakMap.
источник
2019 November 08
PHP Digest
phpdigest
Union Types v2

https://github.com/nikic/php-rfcs/blob/union-types/rfcs/0000-union-types-v2.md

Никита Попов разразился ещё одним монументальным RFC.
Предлагается ввести объединённые типы – это значит, что переменная может принимать один из перечисленных типов. Де-факто объединённые типы давно используются в PHPDoc, но теперь они действительно будут проверяться самим интерпретатором.

Предлагаемый синтаксис T1|T2|... может быть использованы везде, где типы можно указывать сейчас:

class Number {
   private int|float $number;

   public function setNumber(int|float $number): void {
       $this->number = $number;
   }

   public function getNumber(): int|float {
       return $this->number;
   }
}

______________________________________

Также примечательно, что этот RFC в качестве эксперимента оформлен как пул-реквест https://github.com/php/php-rfcs/pull/1 в репозиторий php/php-rfcs. Если такой подход приживётся, то в дальнейшем обсуждения RFC будут проходить на Гитхабе. Финальное голосование всё равно будет проходить на wiki.php.net.
C результатом 61 голосов против 5 предложение принято. В PHP 8.0 нас ждут объединённые типы.
источник
2019 November 11
PHP Digest
Чёрная магия PHP

https://github.com/lisachenko/z-engine

Как замокать финальный класс или переопределить финальный метод? Ну допустим, для этого есть badoo/soft-mocks. А как насчёт добавить интерфейс к существующему классу в рантайме? Или, например, изменять тип объекта.

Новая библиотека от Александра Лисаченко потенциально позволяет делать вообще всё что угодно.

В PHP 7.4 добавлена новая возможность – FFI, которая позволяет подгружать сишные модули (.dll or .so), и вызывать функции из них или использовать структуры данных из C на чистом PHP.
Библиотека Z-Engine использует FFI, чтобы получить доступ к внутренним структурам самого PHP! Z-Engine читает нативные структуры PHP, например, zend_class_entry, zval, и подобные и может изменять их в рантайме.

// Сделаем абстрактный класс обычным
$refClass = new ReflectionClass(TestClass::class);
$refClass->setAbstract(false);
assertFalse($refClass->isAbstract());
$instance = new TestClass();
assertInstanceOf(TestClass::class, $instance);

Осторожно! Библиотека предоставляет практически неограниченный доступ к памяти самого PHP и работает со структурами на низком уровне. Поэтому вполне возможны сегфолты, утечки памяти и другие неприятные последствия. Так что, только для тестов.
источник
2019 November 25
PHP Digest
PHP-Дайджест № 168

PHP 7.4 RC6, Symfony 5.0 и 4.4, WordPress 5.3 и другие релизы, об обновлении PSR-стандартов, RFC предложения из PHP Internals, порция полезных инструментов, митапы, видеозаписи, подкасты и многое другое!

https://habr.com/p/477318/
источник
2019 November 28
PHP Digest
PHP 7.4

Вышла в свет новая версия интерпретатора PHP!

https://www.php.net/releases/7_4_0.php

Среди заметных изменений:
• Типизированные свойства
• Стрелочные функции
• Предзагрузка
• FFI
• Распаковка в массивах
• Разделитель для числовых литералов
• Слабые ссылки
• Возможность бросать исключения в __toString()

Быстро посмотреть новые фичи можно в руководстве по миграции https://www.php.net/manual/en/migration74.new-features.php
Полный список изменений: https://github.com/php/php-src/blob/php-7.4.0/UPGRADING
источник