Po letu razvoja predstavljeno izdaja programskega jezika PHP 7.4. Nova veja vključuje vrsto novih funkcij, pa tudi več sprememb, ki motijo združljivost.
Tipizirane lastnosti - lastnosti razreda lahko zdaj vključujejo deklaracije tipa, na primer:
razred uporabnik {
public int $id;
javni niz $name;
}
Skrajšano sintaksa za definiranje funkcij “fn(parameter_list) => expr” z vezavo obsega po vrednosti. Na primer, "fn($x) => $x + $y" je analogno "$fn2 = funkcija ($x) uporabi ($y) {vrni $x + $y;}");
Stenografski operater dodelitve "??=", ki se lahko uporabi za definiranje privzete vrednosti ("a ??= b" je podoben "a = a ?? b", če je "a" definiran, se njegova vrednost shrani, in če ni definiran, je dodeljena vrednost "b" );
Omejeno priložnost ohranjanje hierarhije dedovanja tipov v izpeljanih vrnjenih tipih ali zmožnost obračanja hierarhije izvirnih tipov v izpeljanih tipih argumentov (kovarianca povratni tip in kontravariantnost tipa argumenta). V PHP je zdaj mogoče uporabiti naslednje konstrukte:
razred A {}
razred B razširi A {}
class Producer {
metoda javne funkcije(): A {}
}
class ChildProducer extends Producer {
metoda javne funkcije (): B {}
}
Razpakiranje operatorja znotraj nizov “…$var”, dovoljuje izvajati zamenjavo obstoječih matrik pri definiranju nove matrike;
Dodana podpora za prednalaganje predpomnilnika objektne kode. Dodan parameter za nastavitev opcache.preload, prek katerega lahko določite skript PHP, ki bo preveden in zagnan ob zagonu strežnika. Ta skript lahko naloži operacijsko kodo drugih datotek z njihovo neposredno vključitvijo ali uporabo funkcije opcache_compile_file();
Dodana funkcija crc32c razširitvi Hash za izračun kontrolnih vsot z uporabo Castagnolijevega polinoma;
Dodana podpora funkciji password_hash() za metode zgoščevanja gesel argon2i in argin2id v implementaciji knjižnice Natrij, če je PHP zgrajen brez libargona;
Dodana funkcija mb_str_split(), podobna str_split(), vendar ne deluje z bajti, temveč s položaji znakov v večbajtnem nizu;
Funkcija strip_tags() ima zdaj možnost posredovanja matrike z imeni oznak, tj. namesto strip_tags($str, ‘’) lahko zdaj določite strip_tags($str, [‘a’, ‘p’]);
proc_open() omogoča, da so operandi navedeni v matriki namesto v nizu za zagon, poleg tega pa zagotavlja preusmeritev niti in podporo za ničelni deskriptor datoteke;
// 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 izključene iz osnovne distribucije. Te razširitve se zdaj distribuirajo prek PECL;
Preneseno v kategorijo zastarel funkcije, kot so ugnezdeni ternarni operatorji brez oklepajev, dostop do elementov polja in nizov z uporabo zavitih oklepajev (»$var{$idx}«), funkcija is_real() in pretvorba v real, uporaba nadrejene ključne besede brez nadrejenega razreda, parameter allow_url_include konfiguracije , z uporabo array_key_exists() na objektih.
Funkcije get_magic_quotes_gpc(), get_magic_quotes_runtime() in
hebrevc(), convert_cyr_string(), money_format(), ezmlm_hash(), restore_include_path(), ldap_control_paged_result_response(), ldap_control_paged_result(), ReflectionType::__toString().
Pri poskusu obdelave nepravilnih simbolov v funkcijah je bilo podano opozorilo o uporabi zastarele funkcije
base_convert(), bindec(), octdec() in hexdec() in pri podajanju vzorca brez niza v mb_ereg_replace().