Π Π΅Π»ΠΈΠ· Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 7.4

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прСдставСн Ρ€Π΅Π»ΠΈΠ· Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 7.4. Новият Ρ€Π°Π·Π΄Π΅Π» Π²ΠΊΠ»ΡŽΡ‡Π²Π° сСрия Π½ΠΎΠ²ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ няколко ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Ρ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ подобрСния Π² PHP 7.4:

  • Π’ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ΠΈ свойства β€” свойствата Π½Π° класовСтС Π²Π΅Ρ‡Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

    class User {
    public int $id;
    public string $name;
    }

  • Π‘ΡŠΠΊΡ€Π°Ρ‚Π΅Π½ синтаксис Π·Π° опрСдСлянС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€žfn(parameter_list) => exprβ€œ, с ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π°Π½Π° област Π½Π° видимост ΠΏΠΎ стойност. НапримСр β€žfn($x) => $x + $yβ€œ Π΅ Π°Π½Π°Π»ΠΎΠ³ Π½Π° β€ž$fn2 = function ($x) use ($y) {return $x + $y;}β€œ);
  • Π‘ΡŠΠΊΡ€Π°Ρ‚Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° присвояванС β€ž??=β€œ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° стойност ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ (β€ža ??= bβ€œ Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° β€ža = a ?? bβ€œ, Π°ΠΊΠΎ β€žaβ€œ Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π°, стойността ΠΌΡƒ сС Π·Π°ΠΏΠ°Π·Π²Π°, Π° Π°ΠΊΠΎ Π½Π΅ Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π°, сС присвоява стойността Π½Π° β€žbβ€œ);
  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° иСрархията Π½Π° наслСдяванС Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΎΡ‚ тях Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡ‚Π΅ стойности ΠΈΠ»ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° иСрархията Π½Π° основнитС Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Π°Ρ‚Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ (ковариантност Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ контравариантност Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ). Π’ PHP сСга ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ слСднитС конструкции:

    class A {}
    class B extends A {}

    class Producer {
    public function method(): A {}
    }
    class ChildProducer extends Producer {
    public function method(): B {}
    }

  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π·Π° Ρ€Π°Π·ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π² масиви β€žβ€¦$varβ€œ позволяващ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° замяна Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ масиви ΠΏΡ€ΠΈ опрСдСлянС Π½Π° Π½ΠΎΠ² масив;

    $parts = [β€˜apple’, β€˜pear’];
    $fruits = [β€˜banana’, β€˜orange’, …$parts, β€˜watermelon’];
    // [β€˜banana’, β€˜orange’, β€˜apple’, β€˜pear’, β€˜watermelon’];

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π½Π°Π³Π»Π΅Π΄Π½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ числа с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Π² числови Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ (1_000_000_00);
  • ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° слаби ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ, позволяващи Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° рСфСрСнция към ΠΎΠ±Π΅ΠΊΡ‚Π°, Π½ΠΎ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ систСмата Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ°;
  • Нов ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ сСриализация Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (комбинация ΠΎΡ‚ Serializable ΠΈ __sleep() / __wakeup()), която замСства интСрфСйса Serializable, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС обявСн Π·Π° остарял;

    // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, содСрТащий всС состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°;
    public function __serialize(): array;

    // ВосстанавливаСт состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ· массива
    public function __unserialize(array $data): void;

  • Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __toString();
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‰ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° кСша Π½Π° обСктния ΠΊΠΎΠ΄. Π—Π° настройка Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€
    opcache.preload, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡƒΠΊΠ°Π·Π²Π° PHP скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС скомпилиран ΠΈ изпълнСн ΠΏΡ€ΠΈ стартиранС Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°. Π’ΠΎΠ·ΠΈ скрипт ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ ΠΎΠΏΠΊΠΎΠ΄ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ‡Ρ€Π΅Π· тяхното Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° функцията opcache_compile_file();
  • Π’ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Hash Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° функция crc32c Π·Π° изчисляванС Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΈ суми с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ Π½Π° ΠšΠ°ΡΡ‚Π°Π½ΡŒΠΎΠ»ΠΈ;
  • Π’ функцията password_hash() Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° Ρ…Π΅ΡˆΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ argon2i ΠΈ argon2id, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Sodium, Π°ΠΊΠΎ PHP Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ Π±Π΅Π· libargon;
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ функцията mb_str_split(), Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Π½Π° str_split(), Π½ΠΎ ΠΎΠΏΠ΅Ρ€ΠΈΡ€Π°Ρ‰Π° Π½Π΅ с Π±Π°ΠΉΡ‚ΠΎΠ²Π΅, Π° с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π° символи Π² ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΈ стринговС;
  • Π’ функцията strip_tags() Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° масив с ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ‚Π°Π³ΠΎΠ²Π΅Ρ‚Π΅, Ρ‚.Π΅. вмСсто strip_tags($str, ' Π± ), сСга ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС strip_tags($str, ['a', 'p']);<a><p>ВмСсто strip_tags($str, ' b '), сСга ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡƒΠΊΠ°Π·Π²Π°Ρ‚Π΅ strip_tags($str, ['a', 'p']);
  • Π’ proc_open() Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ изброяванС Π½Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΈΡ‚Π΅ Π² масив, вмСсто Π΄Π° сС ΡƒΠΊΠ°Π·Π²Π° Π½ΠΈΠ· Π·Π° стартиранС, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° прСнасочванС Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Π½ΡƒΠ»Π΅Π² Ρ„Π°ΠΉΠ»ΠΎΠ² дСскриптор;

    proc_open([β€˜php’, β€˜-r’, β€˜echo Β«Hello World\nΒ»;’], $descriptors, $pipes);

    // Как 2>&1 в shell
    proc_open($cmd, [1 => [β€˜pipe’, β€˜w’], 2 => [β€˜redirect’, 1]], $pipes);

    // ΠΊΠ°ΠΊ 2>/dev/null ΠΈΠ»ΠΈ 2>nul Π² shell
    proc_open($cmd, [1 => [β€˜pipe’, β€˜w’], 2 => [β€˜null’]], $pipes);

  • ΠžΡ‚ основния ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ са ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡΡ‚Π° Firebird/Interbase, Recode ΠΈ WDDX. Π’Π΅Π·ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ сСга сС разпространяват ΠΏΡ€Π΅Π· PECL;
  • ΠŸΡ€Π΅Π²Π΅Π΄Π΅Π½ΠΈ Π² разряда остарСли Ρ‚Π°ΠΊΠΈΠ²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΈ Ρ‚Π΅Ρ€Π½Π°Ρ€Π½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π±Π΅Π· скоби, Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ масиви ΠΈ стринговС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΈ скоби (β€ž$var{$idx}β€œ), функцията is_real() ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ към Ρ‚ΠΈΠΏ real, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° parent Π±Π΅Π· родитСлски клас, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π·Π° конфигурация allow_url_include, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° array_key_exists() Π½Π°Π΄ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ.

    ОбявСни Π·Π° остарСли Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ get_magic_quotes_gpc(), get_magic_quotes_runtime(),
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½ΠΎ Π΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° остарСли Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΎΠΏΠΈΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π½Π΅ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΈ символи Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
    base_convert(), bindec(), octdec() ΠΈ hexdec(), ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΏΡ€ΠΈ посочванС Π½Π° нСстроков шаблон Π² mb_ereg_replace().

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster