PHP 7.4 lage langaj pwogramasyon

Apre yon ane nan devlopman prezante lage langaj pwogramasyon PHP 7.4. Branch nan nouvo gen ladan yon seri de karakteristik nouvo, osi byen ke plizyè chanjman ki kraze konpatibilite.

Kle amelyorasyon nan PHP 7.4:

  • Pwopriyete tape - pwopriyete klas yo kapab kounye a gen ladan deklarasyon kalite, pou egzanp:

    Itilizatè klas {
    piblik int $id;
    fisèl piblik $non;
    }

  • Abreje sentaks pou defini fonksyon "fn(parameter_list) => expr" ak dimansyon obligatwa pa valè. Pa egzanp, “fn($x) => $x + $y” se analogue ak “$fn2 = fonksyon ($x) itilize ($y) {retounen $x + $y;}”);
  • Operatè plasman kout "??=" ki ka itilize pou defini yon valè default ("a ??= b" se menm jan ak "a = a ?? b", si "a" yo defini valè li yo estoke, epi si li pa defini li yo bay valè "b" );
  • Limite opòtinite prezève yerachi eritaj kalite yo nan kalite retounen derive, oswa kapasite pou ranvèse yerachi kalite orijinal yo nan kalite agiman derive (kovarans kalite retounen ak kalite agiman kontrè). Konstriksyon sa yo ka itilize kounye a nan PHP:

    klas A {}
    klas B pwolonje A {}

    pwodiktè klas {
    metòd fonksyon piblik (): A {}
    }
    klas ChildProducer pwolonje Pwodiktè {
    metòd fonksyon piblik (): B {}
    }

  • Debalaj operatè andedan etalaj "...$var", pèmèt fè sibstitisyon nan etalaj ki deja egziste lè defini yon nouvo etalaj;

    $pati = ['pòm', 'pwa'];
    $fwi = ['bannann', 'zoranj', …$pati, 'melon'];
    // ['bannann', 'zoranj', 'pòm', 'pwa', 'melon'];

  • Posibilite reprezantasyon vizyèl gwo nimewo ak delimitasyon nan literal nimerik (1_000_000_00);
  • Sipòte lyen fèb, ki pèmèt ou kenbe yon referans a yon objè, men pa anpeche pèseptè a fatra nan efase objè ki asosye a;
  • New mekanis la serializasyon objè (yon konbinezon Serializable ak __sleep()/__wakeup()), ki ranplase koòdone Serializable a, ki pral depreke;

    // Retounen yon etalaj ki genyen tout eta objè a;
    fonksyon piblik __serialize(): etalaj;

    // Retabli eta yon objè ki soti nan yon etalaj
    fonksyon piblik __unserialize(etalaj $done): anile;

  • Pèmèt yo voye eksepsyon nan yon metòd __toString();
  • Te ajoute sipò pou preloading kachèt kòd objè a. Te ajoute paramèt pou mete
    opcache.preload, atravè ki ou ka presize yon script PHP ki pral konpile epi kouri lè sèvè a kòmanse. Script sa a ka chaje opcode lòt dosye atravè enklizyon dirèk yo oswa lè l sèvi avèk fonksyon opcache_compile_file();
  • Te ajoute fonksyon crc32c nan ekstansyon Hash la pou kalkile checksums lè l sèvi avèk polinòm Castagnoli;
  • Te ajoute sipò nan fonksyon password_hash() pou metòd hashing modpas argon2i ak argin2id, nan aplikasyon bibliyotèk Sodyòm, si PHP bati san libargon;
  • Te ajoute fonksyon mb_str_split(), menm jan ak str_split(), men opere pa ak bytes men ak pozisyon karaktè nan yon fisèl milti-byte;
  • Fonksyon strip_tags() kounye a gen kapasite pou pase yon etalaj ak non tag, sa vle di. olye de strip_tags($str, ' ') ou kapab kounye a presize strip_tags($str, ['a', 'p']);
  • proc_open() pèmèt operands yo dwe nan lis nan yon etalaj, olye ke yon fisèl kouri, epi tou li bay redireksyon fil ak sipò pou yon deskriptè dosye nil;

    proc_open(['php', '-r', 'eko "Bonjou mond\n";'], $deskriptè, $pipes);

    // Tankou 2>&1 nan koki
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['redireksyon', 1]], $tiyo);

    // tankou 2>/dev/null oswa 2>nul nan koki
    proc_open($cmd, [1 => ['pipe', 'w'], 2 => ['null']], $pipes);

  • Ekstansyon Firebird/Interbase, Recode ak WDDX yo eskli nan distribisyon debaz la. Kounye a, ekstansyon sa yo distribye atravè PECL;
  • Transfere nan kategori demode karakteristik tankou operatè ternary enbrike san parantèz, aksè nan eleman etalaj ak fisèl lè l sèvi avèk atèl boukle ("$var{$idx}"), is_real() ak depoze nan reyèl, lè l sèvi avèk mo kle paran an san yon klas paran, paramèt allow_url_include konfigirasyon, lè l sèvi avèk array_key_exists() sou objè yo.

    Fonksyon get_magic_quotes_gpc(), get_magic_quotes_runtime(), ak
    hebrevc (), convert_cyr_string (), money_format (), ezmlm_hash (), restore_include_path (), ldap_control_paged_result_response (), ldap_control_paged_result (), ReflectionType::__toString ().

    Yo bay yon avètisman sou itilizasyon yon karakteristik demode lè w ap eseye trete senbòl ki pa kòrèk nan fonksyon yo
    base_convert (), bindec (), octdec () ak hexdec (), epi lè yo presize yon modèl ki pa kòd nan mb_ereg_replace ().

Sous: opennet.ru