Vrijgave programmeertaal PHP 7.4

Na een jaar van ontwikkeling ingediend vrijgave van programmeertaal PHP 7.4. De nieuwe tak bevat een reeks nieuwe functies, evenals verschillende wijzigingen die de compatibiliteit verbreken.

Toets verbeteringen in PHP 7.4:

  • Getypte eigenschappen - klasse-eigenschappen kunnen nu typedeclaraties bevatten, bijvoorbeeld:

    klasse Gebruiker {
    publieke int $id;
    openbare tekenreeks $naam;
    }

  • Afgekort syntaxis voor het definiëren van functies “fn(parameter_list) => expr” met bereikbinding op basis van waarde. “fn($x) => $x + $y” is bijvoorbeeld analoog aan “$fn2 = functie ($x) gebruik ($y) {return $x + $y;}”);
  • Operator voor steno-toewijzing "??=" die kan worden gebruikt om een ​​standaardwaarde te definiëren ("a ??= b" is vergelijkbaar met "a = a ?? b", als "a" is gedefinieerd, wordt de waarde ervan opgeslagen, en als deze niet is gedefinieerd krijgt de waarde "b" toegewezen);
  • Beperkt kans het behouden van de overervingshiërarchie van typen in afgeleide retourtypen, of de mogelijkheid om de hiërarchie van de oorspronkelijke typen in afgeleide argumenttypen om te keren (covariantie retourneringstype en argumenttype-contravariantie). De volgende constructies kunnen nu in PHP worden gebruikt:

    klasse A, eerste klasse {}
    klasse B verlengt A {}

    klasse Producent {
    publieke functiemethode(): A {}
    }
    klasse ChildProducer breidt Producer { uit
    publieke functiemethode(): B {}
    }

  • Uitpakoperator binnen arrays “…$var”, toelaten vervanging van bestaande arrays uitvoeren bij het definiëren van een nieuwe array;

    $parts = ['appel', 'peer'];
    $fruit = ['banaan', 'sinaasappel', …$delen, 'watermeloen'];
    // ['banaan', 'sinaasappel', 'appel', 'peer', 'watermeloen'];

  • Kans visuele weergave van grote getallen met scheidingstekens in numerieke letterlijke getallen (1_000_000_00);
  • Ondersteunen zwakke schakels, waarmee u een verwijzing naar een object kunt behouden, maar de garbage collector er niet van weerhoudt het bijbehorende object te verwijderen;
  • Nieuw механизм objectserialisatie (een combinatie van Serializable en __sleep()/__wakeup()), die de Serializable-interface heeft vervangen, die zal worden verouderd;

    // Geeft een array terug die alle toestanden van het object bevat;
    publieke functie __serialize(): array;

    // Herstelt de status van een object uit een array
    publieke functie __unserialize(array $data): void;

  • Toegestaan ​​om uitzonderingen van een methode te genereren __toString();
  • Ondersteuning toegevoegd voor het vooraf laden van de objectcodecache. Parameter toegevoegd voor instelling
    opcache.preload, waarmee u een PHP-script kunt opgeven dat wordt gecompileerd en uitgevoerd wanneer de server wordt gestart. Dit script kan de opcode van andere bestanden laden door deze direct op te nemen of door de functie opcache_compile_file() te gebruiken;

  • Functie crc32c toegevoegd aan de Hash-extensie om controlesommen te berekenen met behulp van de Castagnoli-polynoom;
  • Ondersteuning toegevoegd aan de functie wachtwoord_hash() voor wachtwoordhashing-methoden argon2i en argin2id, bij de implementatie van de Sodium-bibliotheek, als PHP zonder libargon is gebouwd;
  • Functie mb_str_split() toegevoegd, vergelijkbaar met str_split(), maar werkt niet met bytes maar met tekenposities in een string van meerdere bytes;
  • De functie strip_tags() heeft nu de mogelijkheid om een ​​array met tagnamen door te geven, d.w.z. in plaats van strip_tags($str, ' ') kun je nu strip_tags($str, ['a', 'p']) opgeven;
  • proc_open() maakt het mogelijk dat de operanden in een array worden vermeld, in plaats van dat ze in een string worden uitgevoerd, en biedt ook thread-omleiding en ondersteuning voor een null-bestandsdescriptor;

    proc_open(['php', '-r', 'echo "Hallo wereld\n";'], $descriptors, $pipes);

    // Zoals 2>&1 in de shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redirect', 1]], $pipes);

    // zoals 2>/dev/null of 2>nul in shell
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Firebird/Interbase, Recode en WDDX-extensies zijn uitgesloten van de basisdistributie. Deze extensies worden nu gedistribueerd via PECL;
  • Overgezet naar categorie verouderd functies zoals geneste ternaire operatoren zonder haakjes, toegang tot array-elementen en strings met behulp van accolades (“$var{$idx}”), de functie is_real() en casten naar real, met behulp van het parent-trefwoord zonder een parent-klasse, parameter allow_url_include-configuraties , met behulp van array_key_exists() op objecten.

    De functies get_magic_quotes_gpc(), get_magic_quotes_runtime() en
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), herstel_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Er is een waarschuwing gegeven over het gebruik van een verouderde functie bij pogingen om onjuiste symbolen in functies te verwerken
    base_convert(), bindec(), octdec() en hexdec(), en bij het specificeren van een niet-tekenreekspatroon in mb_ereg_replace().

Bron: opennet.ru

Voeg een reactie