Нови одлики
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Нови одлики
Референца за `migration80.new-features.php` со подобрена типографија и навигација.
Нови одлики
PHP јадро
. Празен стринг (
Поддршка за . Празен стринг ( е додадена.
Атрибути
Поддршка за Атрибути е додадена.
Промоција на својства на конструктор
Поддршка за промоција на својства на конструкторот (декларирање својства во потпис на конструктор) е додадено.
Униски типови
Поддршка за Првпат објавен во 2020 година, PHP 8.0 беше уште едно големо ажурирање на јазикот PHP. Содржеше многу нови функции и оптимизации, вклучувајќи е додадена.
Израз за совпаѓање
Поддршка за match expressions е додадена.
Оператор за безбедност од null
Поддршка за nullsafe оператор (?->) е додадено.
Други нови одлики
-
На WeakMap класа е додадена.
-
На ValueError класа е додадена.
-
Сега кој било број на параметри на функција може да се замени со варијаден аргумент, сè додека типовите се компатибилни. На пример, следниот код сега е дозволен:
<?php
class A {
public function method(int $many, string $parameters, $here) {}
}
class B extends A {
public function method(...$everything) {}
}
?> -
static (како во „доцна статична врска“) сега може да се користи како тип на враќање:
<?php
class Test {
public function create(): static {
return new static();
}
}
?> -
Сега е можно да се добие името на класата на објект користејќи
$object::class. Резултатот е ист какоget_class($object). -
newandinstanceofсега може да се користи со произволни изрази, користејќиnew (expression)(...$args)and$obj instanceof (expression). -
Применети се некои поправки на конзистентноста на синтаксата на променливите, на пример пишување
Foo::BAR::$bazсега е дозволено. -
Додадено Serializable интерфејс, кој автоматски се имплементира ако класата дефинира __toString() method.
-
Трајтите сега можат да дефинираат апстрактни приватни методи. Таквите методи мора да бидат имплементирани од класата што го користи трајтот.
-
throwсега може да се користи како израз. Тоа дозволува употреби како што се:<?php
$fn = fn() => throw new Exception('Exception in arrow function');
$user = $session->user ?? throw new Exception('Must have user'); -
Сега е дозволена опционална запирка на крајот во списоците со параметри.
<?php
function functionWithLongSignature(
Type1 $parameter1,
Type2 $parameter2, // <-- This comma is now allowed.
) {
} -
Сега е можно да се напише
catch (Exception)за фаќање исклучок без да се чува во променлива. -
Поддршка за mixed типот е додаден.
-
Приватните методи декларирани во родителска класа веќе не наметнуваат никакви правила за наследување на методите на детето класа (со исклучок на финални приватни конструктори). Следниот пример илустрира кои ограничувања се отстранети:
<?php
class ParentClass {
private function method1() {}
private function method2() {}
private static function method3() {}
// Throws a warning, as "final" no longer has an effect:
private final function method4() {}
}
class ChildClass extends ParentClass {
// All of the following are now allowed, even though the modifiers aren't
// the same as for the private methods in the parent class.
public abstract function method1() {}
public static function method2() {}
public function method3() {}
public function method4() {}
}
?> -
get_resource_id() е додаден, кој враќа иста вредност како
(int) $resource. Обезбедува иста функционалност под појасен API. -
На InternalIterator е додадена.
Датум и време
-
DateTime::createFromInterface() and DateTimeImmutable::createFromInterface() се додадени.
-
Спецификаторот за формат на DateTime
pе додаден, што е исто какоPно враќаZотколку+00:00за UTC.
DOM
DOMParentNode and DOMChildNode со нови API за траверзал и манипулација се додадени.
Филтер
FILTER_VALIDATE_BOOL е додаден како алијас за
FILTER_VALIDATE_BOOLEAN. Новиот назив е префериран, бидејќи го користи канонското име на типот.
Омажи
enchant_dict_add(), enchant_dict_is_added()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
LIBENCHANT_VERSION се додадени.
FPM
Додадена е нова опција pm.status_listen што овозможува добивање на статусот од различни крајни точки (на пр. порта или UDS датотека) што е корисно за добивање на статусот кога сите деца се зафатени со сервисирање на долги барања.
Хеш
HashContext објектите сега можат да бидат серијализирани.
Меѓународни функции
На IntlDateFormatter::RELATIVE_FULL,
IntlDateFormatter::RELATIVE_LONG,
IntlDateFormatter::RELATIVE_MEDIUMПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
IntlDateFormatter::RELATIVE_SHORT
константите се додадени.
LDAP
ldap_count_references() е додаден, кој го враќа бројот на референтни пораки во резултат од пребарување.
OPcache
Ако е овозможена опцијата ini opcache.record_warnings, OPcache ќе снима предупредувања при компилација и ќе ги репродуцира при следниот include, дури и ако е сервиран од кешот.
OpenSSL
Додадена поддршка за Cryptographic Message Syntax (CMS) (» RFC 5652) составена од функции за шифрирање, дешифрирање, потпишување, верификација и читање. API-то е слично на API-то за PKCS #7 функции со додавање на нови константи за кодирање:
OPENSSL_ENCODING_DER, OPENSSL_ENCODING_SMIME
and OPENSSL_ENCODING_PEM:
- openssl_cms_encrypt() ја шифрира пораката во датотеката со сертификати и го прикажува резултатот во дадената датотека.
- openssl_cms_decrypt() што ја дешифрира S/MIME пораката во датотеката и ги прикажува резултатите во дадената датотека.
- openssl_cms_read() што го извезува CMS датотеката во низа од PEM certificates.
- openssl_cms_sign() што ја потпишува MIME пораката во датотеката со сертификат и клуч и го прикажува резултатот во дадената датотека.
- openssl_cms_verify() што проверува дека блокот со податоци е недопрен, потписникот е оној што тврди дека е, и ги враќа сертификатите на потписниците.
Регуларни изрази (компатибилни со Perl)
preg_last_error_msg() е додадено, кое враќа порака читлива за човекот за последната PCRE грешка. Го надополнува preg_last_error(), кое враќа цел број enum вредност наместо тоа.
Рефлексија
-
Следниве методи сега можат да вратат информации за стандардните вредности на параметрите на внатрешните функции:
SQLite3
тогаш операцијата DELETE продолжува, но оптимизацијата за скратување е оневозможена и сите редови се бришат поединечно. и соодветните константи на класата се додадени за да се постави callback од корисничко ниво што ќе се користи за овластување или не на акција на базата на податоци.
Стандардна библиотека
-
str_contains(), str_starts_with() and str_ends_with() се додадени, кои проверуваат дали
haystackсодржи, започнува со или завршува соneedle, соодветно. -
fdiv() е додадено, кое врши делење со пловечка запирка под IEEE 754 семантика. Делењето со нула се смета за добро дефинирано и ќе врати една од
Inf,-InforNaN. -
get_debug_type() е додадено, кое враќа тип корисен за пораки за грешки. За разлика од gettype(), користи канонски имиња на типови, враќа имиња на класи за објекти и укажува на типот на ресурс за ресурси.
-
printf() и пријателите сега поддржуваат
%hand%Hспецификатори за форматирање. Тие се исти како%gand%G, но секогаш користат"."како децимален сепаратор, наместо да го одредуваат прекуLC_NUMERIClocale. -
printf() и слични сега поддржуваат користење
"*"како ширина или прецизност, во кој случај ширината/прецизноста се предава како аргумент на printf. Ова исто така овозможува користење на прецизност-1with%g,%G,%hand%H. На пример, следниот код може да се користи за репродукција на стандардното форматирање на PHP со пловечка запирка:<?php
printf("%.*H", (int) ini_get("precision"), $float);
printf("%.*H", (int) ini_get("serialize_precision"), $float);
?> -
proc_open() сега поддржува дескриптори на псевдо-терминал (PTY). Следното прикачува
stdin,stdoutandstderrна истиот PTY:<?php
$proc = proc_open($command, [['pty'], ['pty'], ['pty']], $pipes);
?> -
proc_open() сега поддржува дескриптори на пар сокети. Следното прикачува посебен пар сокети на
stdin,stdoutandstderr:<?php
$proc = proc_open($command, [['socket'], ['socket'], ['socket']], $pipes);
?>За разлика од цевките, сокетите не страдаат од проблеми со блокирачко I/O на Windows. Сепак, не сите програми може да работат правилно со stdio сокети.
-
Функциите за сортирање сега се стабилни, што значи дека елементите со еднакви вредности ќе го задржат својот оригинален редослед.
-
array_diff(), array_intersect() и нивните варијации сега може да се користат со еден аргумент од тип низа. Ова значи дека употреби како следното се сега можни:
<?php
// OK even if $excludes is empty:
array_diff($array, ...$excludes);
// OK even if $arrays only contains a single array:
array_intersect(...$arrays);
?> -
На
flagпараметарот ob_implicit_flush() беше променет за да прифати bool наместо int.
Tidy
PhpToken додава интерфејс базиран на објекти на токенизерот. Обезбедува поуниформна и ергономска репрезентација, додека е поефикасен во меморијата и побрз.
candido1212 на yahoo точка com точка br
-
Zip екстензијата е ажурирана на верзија 1.19.1.
-
Ново (PHP >= 8.0.0, PECL zip >= 1.16.0) and (PHP >= 8.0.0, PECL zip >= 1.16.0) за поставување на времето на модификација на запис.
-
Ново Оваа функција е достапна само ако е изградена со libzip ≥ 1.6.0. за да обезбеди ажурирања при затворање на архивата.
-
Ново Оваа функција е достапна само ако е компајлирана со libzip ≥ 1.3.0. за да се овозможи откажување при затворање на архивата.
-
Ново (OpenBSD) за замена на содржината на записот.
-
Ново ZipArchive::isCompressionMethodSupported() за проверка на опционалните карактеристики на компресија.
-
Ново ZipArchive::isEncryptionMethodSupported() за проверка на опционалните карактеристики на шифрирање.
-
На ZipArchive::lastId додадено е својство за добивање на индексната вредност на последниот додаден запис.
-
Грешките сега можат да се проверат откако архивата е затворена користејќи го ZipArchive::status and ZipArchive::statusSys својства, или ZipArchive::getStatusString() method.
-
На
'remove_path'опцијата за 8.0.0, PECL zip 1.18.1 and Додај ги сите php скрипти и текстуални датотеки од тековната работна директорија се третира како произволен префикс на низа (за конзистентност со'add_path'опција), додека порано се третираше како име на директориум. -
Опционалните карактеристики за компресија / шифрирање сега се наведени во phpinfo.