Izdaja programskega jezika PHP 7.4

Po letu razvoja predstavljeno izdaja programskega jezika PHP 7.4Nova veja vključuje številne nove funkcije, pa tudi več nezdružljivih sprememb.

Ključ izboljšave v PHP 7.4:

  • Tipizirane lastnosti — lastnosti razreda lahko zdaj vključujejo deklaracije tipov, na primer:

    razred uporabnik {
    javno int $id;
    javni niz $ime;
    }

  • Skrajšano Sintaksa definicije funkcije "fn(seznam_parametrov) => izraz" z vezavo obsega vrednosti. Na primer, "fn($x) => $x + $y" je enakovredno "$fn2 = funkcija ($x) use ($y) {return $x + $y;}");
  • Operator dodelitve v skrajšanem formatu "??=", ki ga je mogoče uporabiti za definiranje privzete vrednosti ("a ??= b" je podobno kot "a = a ?? b", če je definiran "a", se njegova vrednost ohrani, če pa ni definiran, se dodeli vrednost "b");
  • Omejeno priložnost ohranjanje hierarhije dedovanja tipov v tipih povratnih vrednosti, ki so iz njih izpeljani, ali možnost pretvorbe hierarhije izvirnih tipov v nasprotno v izpeljanih tipih argumentov (kovarianca kontravariance povratnega tipa in tipa argumenta). V PHP-ju je zdaj mogoče uporabiti naslednje konstrukte:

    razred A {}
    razred B razširja A {}

    razred Producent {
    javna funkcija metoda(): A {}
    }
    razred ChildProducer razširja Producer {
    metoda javne funkcije(): B {}
    }

  • Operator razpakiranja znotraj polj "...$var", dovoljuje izvesti zamenjavo obstoječih polj pri definiranju novega polja;

    $deli = ['jabolko', 'hruška'];
    $sadje = ['banana', 'pomaranča', …$deli, 'lubenica'];
    // ['banana', 'pomaranča', 'jabolko', 'hruška', 'lubenica'];

  • Priložnost vizualna predstavitev velikih števil z ločili v numeričnih literalih (1_000_000_00);
  • Podpora šibki členi, ki omogočajo ohranitev sklica na objekt, vendar ne blokirajo odstranitve povezanega objekta s strani zbiralnika smeti;
  • Novo mehanizem serializacija objektov (kombinacija Serializable in __sleep()/__wakeup()), ki nadomešča vmesnik Serializable, ki bo razglašen za zastarelega;

    // Vrne tabelo, ki vsebuje vsa stanja objekta;
    javna funkcija __serialize(): polje;

    // Obnovi stanje objekta iz polja
    javna funkcija __unserialize(polje $podatki): void;

  • Dovoljenje, da metoda sproži izjeme __toString();
  • Dodana je podpora za predhodno nalaganje predpomnilnika objektne kode. Za konfiguracijo je bil dodan nov parameter.
    opcache.preload, ki vam omogoča, da določite PHP skript, ki bo preveden in zagnan ob zagonu strežnika. Ta skript lahko naloži opkode drugih datotek tako, da jih neposredno vključi ali uporabi funkcijo opcache_compile_file();
  • Funkcija crc32c je bila dodana razširitvi Hash za izračun kontrolnih vsot z uporabo Castagnolijevega polinoma;
  • Funkcija password_hash() je bila posodobljena za podporo metod zgoščevanja gesel argon2i in argin2id v implementaciji knjižnice Sodium, če je PHP zgrajen brez knjižnice libargon;
  • Dodana je funkcija mb_str_split(), podobna funkciji str_split(), vendar ne deluje na bajte, temveč na položaje znakov v večbajtnem nizu;
  • Funkcija strip_tags() vam zdaj omogoča posredovanje polja imen oznak, tj. namesto strip_tags($str, ' ') lahko zdaj določite strip_tags($str, ['a', 'p']);
  • proc_open() omogoča seznam operandov v matriki namesto določanja niza za zagon, poleg tega pa omogoča preusmeritev tokov in podpira deskriptor datoteke z ničelnim kodom;

    proc_open(['php', '-r', 'echo "Pozdravljen, svet\n";'], $deskriptorji, $cevi);

    // Kot 2>&1 v lupini
    proc_open($cmd, [1 => ['cev', 'w'], 2 => ['preusmeritev', 1]], $cevi);

    // kot 2>/dev/null ali 2>nul v lupini
    proc_open($cmd, [1 => ['cev', 'w'], 2 => ['null']], $cevi);

  • Razširitve Firebird/Interbase, Recode in WDDX so bile odstranjene iz osnovne distribucije. Te razširitve so zdaj distribuirane prek PECL;
  • Prestavljeno v kategorijo zastarelo Funkcije, kot so vgnezdeni ternarni operatorji brez oklepajev, dostop do elementov polja in nizov z uporabo zavitih oklepajev ("$var{$idx}"), funkcija is_real() in pretvorba v realno, uporaba ključne besede parent brez nadrejenega razreda, konfiguracijska možnost allow_url_include in uporaba array_key_exists() na objektih.

    Funkciji get_magic_quotes_gpc() in get_magic_quotes_runtime() sta bili razglašeni za zastareli.
    hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().

    Prikazano je bilo opozorilo o uporabi zastarele funkcije pri poskusu obdelave neveljavnih znakov v funkcijah.
    base_convert(), bindec(), octdec() in hexdec() ter pri določanju vzorca, ki ni niz, v mb_ereg_replace().

Vir: opennet.ru

Dodaj komentar