The Fly's PHP - Делаем из Мухи Слона
430 subscribers
29 photos
1 video
66 links
Авторский блог Сергея Мухина

Чат: @fly_php_public

Сайт автора: https://sergeymukhin.com
Download Telegram
Вышел большой пост о дженериках в php, почему многие разработчики желают иметь их в инструментарии и возможно ли это в принципе в PHP?

https://sergeymukhin.com/blog/dzeneriki-v-php
PHP 8.3 будет выпущен как обычно в конце ноября 2023 года. Как обычно начинаю пост о новом функционале и устаревании. Итак первое что известно на данный момент:

unserialize(): Вывод E_WARNING ошибок вместо E_NOTICE

До версии PHP 8.3 передача недопустимой строки в функцию unserialize() выдавала всего лишь уведомления PHP ( E_NOTICE) в определенных случаях, например, при синтаксических ошибках в сериализованной строке. Начиная с PHP 8.3 выдается предупреждение E_WARNING. Кроме того, некоторые условия ошибки функции serialize() также изменяются, чтобы выдавать E_WARNING:

unserialize("invalid-string");

- PHP Notice: unserialize(): Error at offset 0 of 14 bytes //было
+ PHP Warning: unserialize(): Error at offset 0 of 14 bytes //стало

В идеале невозможность десериализации данной строки должна быть серьезной ошибкой и вызывать исключение. Однако для обеспечения обратной совместимости и упрощения путей обновления уровень ошибок в PHP 8.3 был увеличен, а в будущем возможно его обновление для создания исключений.

https://sergeymukhin.com/blog/chto-novogo-v-php-83
Новая функция json_validate

В PHP 8.3 будет добавлена ​​новая функция json_validate(), которая возвращает true или false в том случае, если заданная строка является допустимой строкой JSON. До PHP 8.3 единственным способом определить, является ли заданная строка допустимой строкой JSON, была попытка ее декодирования и проверка наличия каких-либо ошибок. Новая функция json_validate() использует тот же базовый синтаксический анализатор JSON, что и PHP, но потребует меньше памяти:

json_validate('[1, 2, 3]'); //true
json_validate('{1, 2, 3]'); //false
Ранее в обзоре новых функций PHP 8.2 я писал, что будут добавлены readonly классы (только для чтения),
на практике это означает, что все свойства этого класса будут доступны только для чтения. Это особенно полезно при использовании DTO или объектов-значений (Value Object), когда класс имеет только общедоступные свойства для чтения .

Другими словами, вместо того, чтобы писать это:

class PostDTO
{
public function __construct(
public readonly string $title,
public readonly Status $status,
public readonly ?DateTimeImmutable $published_at = null,
) {}
}


можно теперь писать:

readonly class PostDTO
{
public function __construct(
public string $title,
public Status $status,
public ?DateTimeImmutable $published_at = null,
) {}
}


более подробно можно почитать в новом посте https://sergeymukhin.com/blog/php-82-klassy-tolko-dlia-cteniia-readonly-classes
К концу недели накатал пост про одну из фишек PHP 8.2

true, false и null как самостоятельные типы

До версии PHP 8.2 можно было использовать null и только false только как части Union Types:
function foo(): string|null {}
function strpos(): int|false {}


class User extends Model 
{
/**
* @return false
*/
public function isAdmin(): bool
{
return false;
}
}


Начиная с PHP 8.2 можно писать так и не будет ошибок:

class User extends Model 
{
public function isAdmin(): false
{
return false;
}
}


false, true, null можно использовать как самостоятельный тип везде, где PHP принимает тип:

class Foo {

private true $processed;

private false $focused;

public function process(string|int|true $value): true {}

public function focus(int|false $value): false {}

}


Более подробно в посте
https://sergeymukhin.com/blog/php-82-true-false-i-null-kak-samostoiatelnye-tipy
Итак, релиз PHP 8.2 выпущен, об этом официально объявила команда разработчиков PHP https://www.php.net/archive/2022.php#2022-12-08-1.

Давайте быстро пробежимся по новым функциям:

- null и false как самостоятельные типы
- true как самостоятельный тип
- Классы только для чтения
- Новое расширение для генерации случайных чисел Random
- Типы DNF (дизъюнктивных нормальных форм)
- Константы в трейтах
- Новые функции openssl_cipher_key_length и openssl_cipher_key_length
- Новая функция curl_upkeep
- Новая функция ini_parse_quantity
- Новая функция memory_reset_peak_usage
- Получение свойств перечислений в константных выражениях
- Устаревшие динамические свойства
- Редактирование параметров в бэк трейсах
- Изменения типа возвращаемого значения для DateTime
- str_split возвращает пустые массивы для пустых строк
- ksort(..., SORT_REGULAR) изменения порядка сортировки
- Устаревание utf8_encode() и utf8_decode()
- Устаревшие частично поддерживаемые вызываемые объекты
- Нечувствительный к локали strtolower() и strtoupper()
- Изменения подписи для нескольких методов SPL
- Новый модификатор "n" в PCRE
- Экранирование имени пользователя и пароля ODBC
- Устаревшая ${} интерполяция строк
- MySQLi больше не может быть скомпилирован с libmysqli

Более подробно можно почитать в статье https://sergeymukhin.com/blog/chto-novogo-v-php-82
Forwarded from Пых (Валентин Удальцов)
🔴 Начинаем стрим по PHP 8.2!

Подключайтесь и встречайте новый PHP вместе с нами!

https://youtu.be/cXdJxa2gxgo

Картинка из поста в светлом и тёмном вариантах!