Авторский блог Сергея Мухина
Чат: @fly_php_public
Сайт автора: https://sergeymukhin.com
Post #45
435
TH @flyphp
Showing posts older than #46 · Back to latest
server
{
# для лучшей совместимости рекомендуется использовать один порт для quic и https
# указываем протокол quic и параметр reuseport для правильной работы с несколькими рабочими процессами
listen 443 quic reuseport;
listen 443 ssl;
# включаем поддержку http2
http2 on;
# включаем поддержку http3
http3 on;
# разрешаем GSO
quic_gso on;
# разрешаем проверку адреса
quic_retry on;
# Для работы QUIC требуется версия протокола TLSv1.3.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_certificate /path_certs/fullchain.pem;
ssl_certificate_key path_certs/privkey.pem;
# для перенаправления браузеров в quic-порт
add_header Alt-Svc 'h3=":443";max=86400';
...
}

password_hash("some password", PASSWORD_BCRYPT, ["cost" => 12]);
28 Сентября RC 3Выше в посте можно увидеть график выхода всех релизов.

31 Августа RC 1- Стали подготавливать список устаревших функции для PHP 8.4
14 Сентября RC 2
28 Сентября RC 3
12 Октября RC 4
26 Октября RC 5
9 Ноября RC 6
23 Ноября GA
php -l somefile.phpНачиная с PHP 8.3, можно передавать несколько файлов PHP, и PHP CLI проверяет их все за один вызов:
// No syntax errors detected in somefile.php
php -l somefile.php otherfile.phpЕсли линтер обнаруживает какие-либо ошибки в любом из предоставленных файлов, он показывает ошибку и переходит к остальной части списка. Если какой-либо из файлов не прошел проверку, он выдает ошибку:
// No syntax errors detected in somefile.php
// No syntax errors detected in otherfile.php
php -l src/*.php src/**/*.php
fastcgi_buffer_size 4k;Вот как раз нехватка размера буфера и приводит к данной ошибке ERR_HTTP2_PROTOCOL_ERROR в ответ на запрос ресурсов. Следовательно увеличив размера буфера, например x2:
fastcgi_buffers 8 4k;
fastcgi_buffer_size 16k;В принципе все)
fastcgi_buffers 8 16k;
function mb_str_pad(
string $string,
int $length,
string $pad_string = " ",
int $pad_type = STR_PAD_RIGHT,
?string $encoding = null,
): string {}
var_dump(str_pad('Проверка', 10, '_', STR_PAD_RIGHT)); // Выведет: string(8) "Проверка"
// Тут же посчитается все верно и выведет два конечных __ после слова
var_dump(mb_str_pad('Проверка', 10, '_', STR_PAD_RIGHT));// string(10) "Проверка__"
class_alias() теперь поддерживает псевдонимы встроенных классов PHP, как вы помните функция class_alias() создает псевдоним для переданного класса. Класс с псевдонимом ведет себя точно так же, как исходный класс.class_alias('stdClass', 'MyClass');
class_alias('Traversable', 'NewTraversableInterface');
ValueError: class_alias(): Argument #1 ($class) must be a user-defined class name, internal class name given


class FooОтрицательные индексы в массивах
{
public const string A = 'a';
public const int B = 1;
public const float C = 1.1;
public const bool D = true;
public const array E = ['a', 'b'];
}
$array = [];Начиная с PHP 8.3, следующий элемент будет добавлен в index -4:
$array[-5] = 'a';
$array[] = 'b';
var_export($array);
//array (
// -5 => 'a',
// 0 => 'b',
//)
//array (Ну и напоследок спорное решение в виде атрибут #[Override]
// -5 => 'a',
// -4 => 'b',
//)
$class = new readonly class {
public function __construct(
public string $foo = 'bar',
) {}
};readonly class Post
{
public function __construct(
public DateTime $createdAt,
) {}
public function __clone()
{
$this->createdAt = new DateTime();
// так можно,
// даже не смотря на то что свойство createdAt только для чтения.
}
}