Нови одлики
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Нови одлики
Референца за `migration85.new-features.php` со подобрена типографија и навигација.
Нови одлики
PHP јадро
Оператор за цевки
Додаден е цевка (|>) оператор.
<?php
$result = "Hello World" |> strlen(...);
print $result . PHP_EOL; // Prints "11"Затворање во константни изрази
Додадена е поддршка за Затворања and првокласни повикувачи во константни изрази. Ова вклучува:
- Параметри на атрибути.
- Стандардни вредности на својства и параметри.
- Константи и Класни константи.
#[\NoDiscard] атрибут
Додаден е NoDiscard атрибут за да се укаже дека вратената вредност на функцијата е важна и треба да се користи.
Исто така, додаден е (void) cast за да се укаже дека некористењето на вредност е намерно. The (void) cast сам по себе нема ефект врз извршувањето на програмата, но може да се користи за да се потиснат предупредувањата што ги емитува #[\NoDiscard] и веројатно исто така дијагностика што ја емитуваат надворешни IDE или алатки за статичка анализа.
<?php
#[\NoDiscard]
function concat(string $a, string $b): string {
return $a . $b;
}
// Warning: The return value of function concat() should either be used or
// intentionally ignored by casting it as (void) in xxx.php
concat("a", "b");
// No warning, because the return value is consumed by the assignment.
$results = concat("a", "b");
// No warning, because the (void) cast is used.
(void)concat("a", "b");Атрибути на константи
Додадена поддршка за атрибути на константи без класи во време на компајлирање (на пр. const MY_CONST = 1; отколку
define('MY_CONST', 1);).
На Застарено атрибутот сега може да се користи на константи.
#[\DelayedTargetValidation] attribute
Новиот DelayedTargetValidation атрибутот може да се користи за да се потиснат грешките во време на компајлирање од основни (или екстензија) атрибути што се користат на невалидни цели. Овие грешки наместо тоа се пријавуваат во време на извршување ако и кога , осигурувајќи дека валидацијата на аргументите се случува во тој момент. се повикува.
#[\Override] за својства
Надминување атрибутот сега може да се примени на својства.
Статичка асиметрична видливост
Додадено асиметрична видливост поддршка за статички својства.
Повици за грешки при фатални грешки
Фаталните грешки (како што е надминато максимално време на извршување) сега вклучуваат повици.
Промоција на конструктор за финално својство
Промоција на својство на конструктор сега може да се користи за финални својства.
Префрлања во константни изрази
Додадена поддршка за кастинг во константни изрази.
<?php
const T1 = (int) 0.3; // Previously: "Fatal error: Constant expression contains invalid operations"
print T1 . PHP_EOL; // Prints "0"Функција clone
На конструкцијата на јазикот clone сега е функција и поддржува повторно доделување (readonly) својства при клонирање преку новиот $withProperties parameter.
cURL
Додадена е поддршка за споделување на рачки кои се перзистираат низ повеќе PHP барања, безбедно овозможувајќи поефективно повторно користење на врската.
Додадена е поддршка за CURLINFO_USED_PROXY (libcurl >= 8.7.0),
CURLINFO_HTTPAUTH_USEDПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во CURLINFO_PROXYAUTH_USED (libcurl >= 8.12.0) на curl_getinfo() функција. Кога curl_getinfo() враќа низа, истата информација е достапна како "used_proxy",
"httpauth_used"Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во "proxyauth_used"
keys.
CURLINFO_USED_PROXY добива нула ако не бил користен прокси во претходниот трансфер или вредност различна од нула ако бил користен прокси.
CURLINFO_HTTPAUTH_USED and
CURLINFO_PROXYAUTH_USED добива битни маски што укажуваат на методите за автентикација на HTTP и прокси што биле користени во претходното барање. Види CURLAUTH_* константи за можни вредности.
Додадено CURLOPT_INFILESIZE_LARGE Curl опција, која е безбедна замена за CURLOPT_INFILESIZE. На одредени системи,
CURLOPT_INFILESIZE прифаќа само 32-битен потпишан цел број како големина на датотеката (2.0 GiB) дури и на 64-битни системи.
CURLOPT_INFILESIZE_LARGE прифаќа најголема цел број вредност што системот може да ја обработи.
Додадено CURLFOLLOW_OBEYCODE,
CURLFOLLOW_FIRSTONLY and CURLFOLLOW_ALL
вредности за CURLOPT_FOLLOWLOCATION
curl_setopt() option.
CURLFOLLOW_OBEYCODE построго да следи во однос на пренасочувањето ако тие се дозволени.
CURLFOLLOW_FIRSTONLY да следи само прво пренасочување, така што ако има какво било дополнително пренасочување, нема да оди понатаму.
CURLFOLLOW_ALL е еквивалентно на поставување
CURLOPT_FOLLOWLOCATION на точно.
Додадена е поддршка за CURLINFO_CONN_ID (libcurl >= 8.2.0) на curl_getinfo() функцијата. Овој констант овозможува добивање на уникатниот ID на врската што се користи при cURL трансфер. Тој е главно корисен кога е потребна логика за повторно користење на врски или групирање на врски во PHP апликации. Кога curl_getinfo() враќа низа, оваа вредност е достапна како "conn_id" key.
Додадена е поддршка за CURLINFO_QUEUE_TIME_T (libcurl >= 8.6.0) на curl_getinfo() функцијата. Овој констант овозможува добивање на времето (во микросекунди) што барањето го поминало во редот за чекање на врски на libcurl пред да биде испратено. Оваа вредност може да се добие и со поминување на
CURLINFO_QUEUE_TIME_T на curl_getinfo()
option parameter.
Додадена е поддршка за CURLOPT_SSL_SIGNATURE_ALGORITHMS за специфицирање на алгоритмите за потпис што ќе се користат за TLS.
DOM
Додадено Dom\Element::$outerHTML.
Додадено $children својство на Dom\ParentNode implementations.
EXIF
Додадена е поддршка за OffsetTime* Exif ознаки.
Додадена е поддршка за HEIF/HEIC.
Филтер
Додаден нов FILTER_THROW_ON_FAILURE знаме што може да се помине на филтер функциите и ќе предизвика активирање на исклучок кога валидацијата ќе пропадне. Новото знаме не може да се комбинира со
FILTER_NULL_ON_FAILURE; обидот да се направи тоа ќе резултира со ValueError што ќе биде фрлен.
Меѓународен
Додадени се класни константи NumberFormatter::CURRENCY_ISO,
NumberFormatter::CURRENCY_PLURAL,
NumberFormatter::CASH_CURRENCYПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во NumberFormatter::CURRENCY_STANDARD
за разни формати на броеви поврзани со валути.
Додадено (libcurl >= 8.7.0), and Locale::addLikelySubtags() за ракување со веројатни ознаки на даден локал.
Додадено IntlListFormatter класа за форматирање, нарачување и интерпункција на список со ставки со даден локал,
IntlListFormatter::TYPE_AND,
IntlListFormatter::TYPE_OR,
IntlListFormatter::TYPE_UNITS операнди и
IntlListFormatter::WIDTH_WIDE,
IntlListFormatter::WIDTH_SHORT and
IntlListFormatter::WIDTH_NARROW ширини. Поддржано е од icu 67.
PDO_Sqlite
Додадена константа на класа Pdo\Sqlite::ATTR_BUSY_STATEMENT.
Додадени се класни константи Pdo\Sqlite::ATTR_EXPLAIN_STATEMENT,
Pdo\Sqlite::EXPLAIN_MODE_PREPARED,
Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN,
Pdo\Sqlite::EXPLAIN_MODE_EXPLAIN_QUERY_PLAN.
Додадено Pdo\Sqlite::ATTR_TRANSACTION_MODE атрибут за конекција со можни вредности Pdo\Sqlite::TRANSACTION_MODE_DEFERRED,
Pdo\Sqlite::TRANSACTION_MODE_IMMEDIATEПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во Pdo\Sqlite::TRANSACTION_MODE_EXCLUSIVE, дозволувајќи конфигурирање на режимот на трансакција што ќе се користи при повикување на beginTransaction().
Сесија
session_set_cookie_params(),
session_get_cookie_params()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во session_start() сега поддржуваат поделени колачиња преку
"partitioned" key.
SOAP
Случаите наENUM се сега исфрлени во Locale::minimizeSubtags().
Додадена поддршка за атрибутот xml:lang на Soap 1.2 Reason Text.
Сигнатурата на Името на грешката. Ова може да се користи за избор на име од WSDL датотека. and
SoapClient::__getTypes() затоа сега имаат опционален $lang параметар. Оваа поддршка решава компатибилност со .NET SOAP клиенти.
Стандардно
mail() сега го враќа вистинскиот sendmail грешка и открива дали sendmail процесот бил неочекувано прекинат. Во такви случаи, се емитува предупредување и функцијата враќа false. Претходно, овие грешки беа тивко игнорирани. Оваа промена влијае само на sendmail транспортот.
getimagesize() сега поддржува HEIF/HEIC слики.
getimagesize() сега поддржува SVG слики кога е вчитан и ext-libxml. Слично, image_type_to_extension() and image_type_to_mime_type() сега исто така ракува со IMAGETYPE_SVG.
Низата вратена од getimagesize() сега има две дополнителни записи:
"width_unit" and "height_unit" за да покаже во кои единици се изразени димензиите. Овие единици стандардно се px. Тие не мора да бидат исти (само за да дадеме еден пример: едното може да биде cm, а другото px).
setcookie() and setrawcookie() сега поддржува
"partitioned" key.
URI
Додадено е секогаш овозможено uri проширување што може да се користи за ракување со URI и URL според RFC 3986 и WHATWG URL.
XSL
На $namespace аргументот на SoapServer::fault(),
XSLTProcessor::getParameter() and
XSLTProcessor::setParameter() сега навистина работи наместо да се третира како празно. Ова работи само ако $name аргументот не користи Clark нотација и не е QName бидејќи во тие случаи просторот за имиња се зема од просторот за имиња href или префикс соодветно.
(libcurl >= 8.7.0),
flock() сега е поддржано на zlib потоци. Претходно, ова секогаш не успеваше да изврши никаква акција за заклучување.