Рубрики
Uncategorized

Новые возможности PHP 7.4

Автор оригинала: David Wong.

PHP 7.4 Его выход запланирован на 21 ноября 2019 года. Он добавляет следующие функции:

  • Короткое закрытие функция( короткое закрытие )
  • Производительность подачи предварительной загрузки
  • Ограничение типа атрибута
  • Улучшенная дисперсия типов (Без перевода)
  • Аббревиатура троичной операции
  • Операция расширения массива
  • Новые Магические методы : сериализация
  • Разделитель чисел
  • Оперативный Приоритет
  • Разрешено в __toString Создайте исключение в
  • Поддержка Отражающей Ссылки
  • Новая функция разделения байтов
  • удалить php Короткую метку
  • Отказ от оператора левой ассоциации
  • Изменение, которое больше не является обратно совместимым

Функция короткого замыкания

Функции короткого замыкания могут уменьшить избыточный код:

array_map(function (User $user) { 
    return $user->id; 
}, $users)
array_map(fn(User $user) => $user->id, $users)

Необходимо отметить несколько моментов:

  1. Короткие замыкания обеспечивают прямой доступ к переменным вне функций замыкания, поэтому дальнейшая запись не требуется. используйте Ключевое слово
  2. с fn Ключевым словом Start
  3. $это Его можно использовать как обычное закрытие
  4. Короткие замыкания содержат только одну строку кода и используются только для деклараций возврата. Их использование запрещено. возврат Ключевое слово

Вы также можете использовать более строгий подход

$ids = array_map(fn(User $user): int => $user->id, $user);

Предварительная загрузка

Предварительная загрузка PHP может значительно повысить производительность

Преимущества: PHP 7.4 Ранее, если вы использовали фреймворк для разработки, каждый файл запроса должен был быть загружен и перекомпилирован. Предварительная загрузка загружает файлы в память при запуске фрейма и является постоянной для последующих запросов.

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

Ограничение типа атрибута

class A
{
    public string $name;
    
    public Foo $foo;
}

Должен сказать, PHP Все ближе и ближе Java Равный сильный язык типов

Улучшенная дисперсия типов

Ковариантный тип возврата:

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}

Зависимость (знакома ли она):?

class ParentType {}
class ChildType extends ParentType {}

class A
{
    public function covariantReturnTypes(): ParentType
    { /* … */ }
}

class B extends A
{
    public function covariantReturnTypes(): ChildType
    { /* … */ }
}

Короткий Троичный оператор

В настоящее время > PHP 7 Более поздняя версия:

$data['date'] = $data['date'] ?? new DateTime();

оставайтесь PHP 7.4 Вы можете написать следующее:

$data['date'] ??= new DateTime();

Операция расширения массива

Объедините массивы в другой массив и верните одномерные массивы

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

Будьте осторожны Действует только для цифрового индекса

Магический метод Нового класса

RFC Добавлены два новых магических метода __сериализация и __несериализация

Разделитель чисел

Позволяет более интуитивно разделять значения с подчеркиванием

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;

Оперативный Приоритет

PHP 7.4 Ранее, если вы писали так:

echo "sum: " . $a + $b;

PHP Это будет истолковано как:

echo ("sum: " . $a) + $b;

PHP 8 Это будет решено следующим образом:

echo "sum :" . ($a + $b);

____тоСтринг Создает исключение в

Поддержка Отражающей Ссылки

PHP 7.4 Будут новые дополнения Ссылка на отражение класс

Удалить ярлык Short

Это будет в PHP 8 Удалить в, Будет продолжать сохранять

Отказ от оператора левой ассоциации

PHP Некоторые странные странности, такие как

1? 2: 3? 4: 5; // will be discarded in PHP 7.4, and compilation errors will be thrown in PHP 8.

(1? 2: 3)? 4: 5; // Correct

Изменение, которое больше не является обратно совместимым

  1. Отказ от вызовов без родительского класса родительский::
  2. вызов var_dump Печать Дата, время и DateTimeImmutable Shi’instance больше не будут оставаться доступными свойствами объектов
  3. openssl_random_pseudo_bytes При вызове ошибки возникает исключение
  4. сериализуйте PDO и PDOStatement Экземпляр создаст Исключение Вместо PDOException ненормальное
  5. вызовите get_object_vars() Печать Объект массива Экземпляр вернет ArrayObject Свои собственные свойства, а не значения завернутых массивов или объектов,

Приведение массива не влияет