Започна бета-тестироването на PHP 8

Представено първото бета издание на новата версия на езика за програмиране PHP 8. Пускането е насрочено за 26 ноември. В същото време са създадени коригиращи версии на PHP 7.4.9, 7.3.21 и
7.2.33, в които са отстранени натрупаните грешки и уязвимости.

Основни нововъведения PHP 8:

  • Включване на JIT компилатора, използването на който ще повиши производителността.
  • Поддръжка именовани аргументи на функции, позволяващи предаване на стойности на функцията, свързани с имената, т.е. аргументите могат да се предават в произволен ред и да се определят незадължителни аргументи. Например, „array_fill(start_index: 0, num: 100, value: 50)“.
  • При извикване на методи е разрешено използването на оператора „?“, който позволява извикването само, ако методът присъства, което спестява ненужни проверки за връщане на стойност „null“. Например, „$dateAsString = $booking->getStartDate()?->asDateTimeString()“;
  • Поддръжка съюзни типове, определящи колекции от два и повече типа (например „public function foo(Foo|Bar $input): int|float;“).
  • Поддръжка атрибути (анотации), позволяващи прикрепяне на метаданни (например информация за типовете) към класовете без използване на синтаксис на Docblock.
  • Поддръжка на изрази match, които, за разлика от switch, могат да връщат стойности, поддържат комбиниране на условия, използват строго сравнение на типове и не изискват посочване на „break“.

    $result = match($input) {
    0 => „hello“,
    '1', '2', '3' => „world“,
    };

  • Съкратен синтаксис за определяне на класове, позволяващ комбиниране на определението на конструктора и свойствата.
  • Нов тип връщани стойности — static.
  • Нов тип — mixed, който може да се използва за определяне на параметри с различни типове в функция.
  • Израз throw за обработка на изключения.
  • WeakMap за създаване на обекти, които могат да бъдат жертви при събиране на боклук (например, за съхранение на незадължителни кешове).
  • Възможност за използване на израза „::class“ за обекти (аналог на извикването на get_class()).
  • Възможност определяне в блока catch на изключения, които не са свързани с променливи.
  • Възможност оставяне на запетая след последния елемент в списъка на параметрите на функция.
  • Нов интерфейс Stringable за идентифициране на всякакви типове низове или данни, които могат да бъдат преобразувани в низ (за които е достъпен метод __toString()).
  • Нова функция str_contains(), опростен аналог на strpos за определяне на присъствие на подниз, както и функциите str_starts_with() и str_ends_with() за проверка на съвпадения в началото и края на низ.
  • Добавена функция fdiv(), която извършва операция на деление без да изведе грешка в случай на деление на нула.
  • Променена логика на свързване на низове. Например, изразът ‘echo «sum: » . $a + $b’ преди се интерпретираше като ‘echo («sum: » . $a) + $b’, а в PHP 8 ще бъде обработен като ‘echo «sum: » . ($a + $b)’.
  • Засилена проверка на аритметични и битови операции, например, изразите «[] % [42]» и «$object + 4» ще предизвикат грешка.
  • Реализиран стабилен алгоритъм за сортиране, при който при различни изпълнения се запазва реда на повторенията на идентични стойности.
  • Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster