PHP.mk документација

Некомпатибилни промени воназад

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

migration84.incompatible.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека migration84.incompatible.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Некомпатибилни промени воназад

Референца за `migration84.incompatible.php` со подобрена типографија и навигација.

migration84.incompatible.php

Некомпатибилни промени воназад

Although not explicitly stated in this section, every new function, Иако не е експлицитно наведено во овој дел, секоја нова, или constant класа, интерфејс, enum Грешка може да предизвика повторно декларирање

PHP јадро

exit() да биде фрлено.

На exit()die()промена на однесувањето callable) програмски конструкции сега се однесуваат повеќе како функција. Ова значи дека тие сега можат да се проследат како strict_types s, се под влијание на

изјавата declare, и сега вршат вообичаено претворање на типови наместо претворање на било која нецелобројна вредност во стринг. exit() and die() Како такви, проследувањето на невалидни типови до TypeError што ќе биде фрлен.

сега доследно ќе резултира со

Рекурзија при споредба Грешка Откривањето на рекурзија при споредба сега резултира со E_ERROR фатална грешка.

Индиректна модификација на readonly својства

Индиректна модификација на readonly својства во рамките на __clone() веќе не е дозволена, на пр. $ref = &$this->readonly. Ова веќе беше забрането за readonly иницијализација, и беше пропуст во имплементацијата на "readonly reinitialization during cloning".

Промена на типот на константите

На PHP_DEBUG and PHP_ZTS константите сега се од тип bool. Previously they were of type int.

. Претходно беа од тип

Должина на привремена датотека tempnam() Името на прикачените датотеки и датотеките создадени од

Отстранување на E_STRICT функцијата сега е подолга за 13 бајти. Вкупната должина сè уште зависи од платформата.

На E_STRICT ниво на грешка E_STRICT нивото на грешка е отстрането, бидејќи веќе не се користеше во PHP моторот. На

константа е депрецирана.

Константи на класата на екстензија кои сега се Типизирани

Миграција на ресурси во објекти

Неколку resourceи се мигрирани во object. Проверките на вратената вредност користејќи is_resource() треба да се заменат со проверки за falseSqlite

DBA

На DBA , освен ако не е поинаку наведено. Dba\Connection објекти наместо dba_connection resources.

ODBC

На ODBC , освен ако не е поинаку наведено. Odbc\Result објекти наместо odbc_result resources.

На ODBC , освен ако не е поинаку наведено. Odbc\Connection објекти наместо odbc_connection resources.

SOAP

На SoapClient::$httpurl функциите сега прифаќаат и враќаат Soap\Url објект наместо soap_url resourceсвојство сега е is_resource() променливи за влез is_resource($client->httpurl). Проверките користејќи null променливи за влез $client->httpurl !== null).

На SoapClient::$sdl функциите сега прифаќаат и враќаат Soap\Sdl објект наместо soap_sdl resourceсвојство сега е is_resource() променливи за влез is_resource($client->sdl). Проверките користејќи null променливи за влез $client->sdl !== null).

) треба да се заменат со проверки за

Нови предупредувања и исклучоци

, за разлика од

curl_multi_select() сега фрла ValueError ако timeout Додадени се нови предупредувања и исклучоци кои се активираат при програмски грешки, т.е. невалидни вредности дадени како аргументи. 0 или поголемо од PHP_INT_MAX.

параметарот е помал од

imagejpeg(), imagewebp(), imagepng(), imageavif() сега фрлаат ValueError Враќа описот, како стринг. quality се предава.

imageavif() сега ќе фрли ValueError ако е невалиден speed Gd

imagescale() сега ќе фрли ValueError ако width or height параметри underflows/overflows.

imagescale() сега ќе фрли ValueError ако е невалиден mode Gd

imagefilter() сега ќе фрли ValueError со IMG_FILTER_SCATTER филтер ако sub or plus параметри underflows/overflows.

Превод

bind_textdomain_codeset(), textdomain(), d*gettext сега фрлаат ValueError if domain е празниот стринг.

Меѓународен

resourcebundle_get(), ResourceBundle::get(), и пристапување на офсети на ResourceBundle објектот сега фрла:

  • TypeError за невалидни типови на офсети
  • ValueError за празно string
  • ValueError ако целобројниот индекс не се вклопува во потпишан 32-битен цел број

IntlDateFormatter::__construct() фрла ValueError ако locale е невалидна. Пред PHP 8.4.0, невалиден режим би се прифатил тивко како

NumberFormatter::__construct() фрла ValueError ако locale е невалидна. Пред PHP 8.4.0, невалиден режим би се прифатил тивко како

MBString

mb_encode_numericentity() and mb_decode_numericentity() сега проверува дека map е составен само од ints, ако не е ValueError сега се фрла.

mb_http_input() сега секогаш фрлаат ValueError if type е невалидна. Пред PHP 8.4.0, невалиден режим би се прифатил тивко како

mb_http_output() сега проверува дека encoding не содржи нула бајти, ако содржи ValueError сега се фрла.

ODBC

odbc_fetch_row() returns false when row е помалку или еднакво на 0. Во овој случај сега се емитува предупредување.

PCNTL

На pcntl_sigprocmask(), pcntl_sigwaitinfo()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во pcntl_sigtimedwait() функциите сега фрлаат:

  • А ValueError ако signals низата е празна (освен за pcntl_sigprocmask() ако mode SIG_SETMASK)
  • А TypeError ако вредноста на signals низата не е int
  • А ValueError ако вредноста на signals низата не е валиден број на сигнал

На pcntl_sigprocmask() функцијата сега фрла ValueError ако mode не е една од SIG_BLOCK, SIG_UNBLOCK, или SIG_SETMASK.

На pcntl_sigtimedwait() функцијата сега фрла:

  • А ValueError if seconds е помала од 0
  • А ValueError if nanoseconds е помала од 0 или поголемо од 1e9
  • А ValueError ако и двете seconds and nanoseconds are 0

Сесија

Поставување на непозитивна вредност за session.gc_divisor или негативна вредност за session.gc_probability сега емитува предупредување.

SimpleXML

Повикување simplexml_import_dom() со не-XML објект сега фрла TypeError наместо ValueError.

Стандардно

На round() функцијата сега ја валидира вредноста на mode и фрла ValueError за невалидни режими. Претходно, невалидните режими би биле толкувани како PHP_ROUND_HALF_UP.

На str_getcsv() сега фрла ValueErrorи кога separator and enclosure аргументите не се долги еден бајт, или ако escape аргументот не е долг еден бајт ниту празен стринг. Ова го усогласува однесувањето да биде идентично со она на fputcsv() and fgetcsv().

На php_uname() функцијата сега фрла ValueError ако mode е невалидна. Пред PHP 8.4.0, невалиден режим би се прифатил тивко како

На "allowed_classes" опција за unserialize() сега фрла TypeErrorи ValueErrorако не е array ако

XMLReader

Проследување на невалидна кодировка на карактери до XMLReader::open() or XMLReader::XML() сега фрла ValueError.

Проследување на string што содржи нулти бајти претходно емитуваше предупредување и сега фрла ValueError.

XMLWriter

Проследување на string што содржи нулти бајти претходно емитуваше предупредување и сега фрла ValueError.

XSL

XSLTProcessor::getParameter() сега ќе фрли ValueError кога неговите аргументи содржат нулти бајти. Ова никогаш навистина не работеше правилно од самиот почеток, затоа сега фрла исклучок.

Повикување XSLTProcessor::importStyleSheet() со не-XML објект сега фрла TypeError наместо ValueError.

Неуспешното повикување на PHP функција callback за време на евалуација сега фрла наместо да емитува предупредување.

Датум

number симболи во релативни формати повторно прифаќаат повеќе знаци, на пр. +-2.

DOM

Некои DOM методи претходно враќаа false или DOMException со код DOM_PHP_ERR ако нов јазол не можеше да се распредели. Тие сега доследно фрлаат DOMException со код DOM_INVALID_STATE_ERR. Оваа ситуација е исклучително ретка и веројатноста да бидете засегнати е мала. Како резултат DOMImplementation::createDocument() DOMDocument::registerNodeClass() DOMDocument наместо DOMDocument|false.

Претходно, DOMXPath објекти можеа да се клонираат, но резултираа со неупотреблив објект. Ова веќе не е можно, и клонирањето на DOMXPath објект сега фрла Грешка.

На DOMImplementation::getFeature() методот е отстранет.

GMP

На GMP класата сега е конечна и повеќе не може да се прошири.

MBString

На невалидни низи (оние со грешки во кодирањето), mb_substr() сега ги толкува индексните позиции на знаците на ист начин како и повеќето други mbstring функции. Ова значи дека индексните позиции на знаците вратени од mb_strpos() може да се проследат до mb_substr().

За SJIS-Mac (MacJapanese) низи, индексните позиции на знаците проследени до mb_substr() сега се однесуваат на индексните позиции на Unicode кодовите кои се произведуваат кога низата се претвора во Unicode. Ова е значајно бидејќи околу 40 SJIS-Mac знаци се претвораат во низа од повеќе Unicode кодови.

MySQLi

Неискористената и недокументирана константа MYSQLI_SET_CHARSET_DIR е отстрането.

На MYSQLI_STMT_ATTR_PREFETCH_ROWS константата е отстранета. Функционалноста не е достапна со mysqlnd.

На MYSQLI_CURSOR_TYPE_FOR_UPDATE and MYSQLI_CURSOR_TYPE_SCROLLABLE константите се отстранети. Оваа функционалност никогаш не беше имплементирана, ниту со mysqlnd ниту со libmysql.

Неискористениот MYSQLI_TYPE_INTERVAL константа, која моментално е приклучок и носечка за MYSQLI_TYPE_ENUM, е отстранета.

MySQLnd

Кодот за грешка пријавен за тајмаути на чекање на MySQL сервер е променет од 2006 to 4031 за верзии на MySQL сервер 8.0.24 и погоре.

Opcache

Максималната вредност на opcache.interned_strings_buffer поставката на 64-битни архитектури сега е 32767. Претходно беше 4095.

JIT

Стандардните вредности на конфигурацијата за JIT се променија од opcache.jit=tracing and opcache.jit_buffer_size=0 to opcache.jit=disable and opcache.jit_buffer_size=64M, соодветно.

Ова не влијае на стандардното однесување што може да се забележи, бидејќи JIT сè уште е оневозможено стандардно. Сепак, сега е оневозможено преку opcache.jit поставката, наместо opcache.jit_buffer_size. Ова може да влијае на корисниците кои претходно го овозможиле JIT преку opcache.jit_buffer_size исклучиво, без исто така да специфицираат JIT режим користејќи opcache.jit. За да овозможите JIT компилација, поставете го opcache.jit конфигурациската вредност соодветно.

Враќа JIT компилацијата е овозможена, PHP сега ќе излезе со фатална грешка при стартување ако иницијализацијата на JIT компилаторот не успеа од која било причина.

PCNTL

На pcntl_sigprocmask(), pcntl_sigwaitinfo()Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во pcntl_sigtimedwait() функциите сега секогаш враќаат false при неуспех. Во некои случаи претходно можеше да ја врати вредноста -1.

PCRE

Вклучениот pcre2lib е ажуриран на верзија 10.44. Како последица, ова значи дека {,3} сега се препознава како квантификатор наместо како текст. Понатаму, значењето на некои класи на знаци во UCP режим е променето. Консултирајте го » PCRE2 Дневник на промени за целосен дневник на промени.

PDO_DBLIB

На Pdo\Dblib::ATTR_STRINGIFY_UNIQUEIDENTIFIER and Pdo\Dblib::ATTR_DATETIME_CONVERT атрибутите сега дејствуваат како булови атрибути наместо цели броеви. Така поставувањето на атрибутот преку Имајте предвид дека атрибутите специфични за драјверот и неговото враќање преку Добиј информации за MySQL хост очекува и или враќа bool.

PDO_FIREBIRD

На PDO::ATTR_AUTOCOMMIT атрибутот сега дејствува како булев атрибут наместо цел број. Така поставувањето на атрибутот преку Имајте предвид дека атрибутите специфични за драјверот и неговото враќање преку Добиј информации за MySQL хост очекува и или враќа bool.

Екстензијата сега открива некои Firebird C++ API, затоа градењето на оваа екстензија сега бара C++ компајлер. Покрај тоа, екстензијата сега мора да биде компајлирана против fbclient 3.0 или повисоко.

PDO_MYSQL

На PDO::ATTR_AUTOCOMMIT, PDO::ATTR_EMULATE_PREPARESПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во PDO::MYSQL_ATTR_DIRECT_QUERY атрибутите сега дејствуваат како булови атрибути наместо цели броеви. Така поставувањето на атрибутот преку Имајте предвид дека атрибутите специфични за драјверот и неговото враќање преку Добиј информации за MySQL хост очекува и или враќа bool.

PDO_PGSQL

Крединциалите на DSN, кога се поставени, имаат приоритет пред нивните PDO конструкторски пандани, бидејќи се поблиску до она што го наведува документацијата.

SimpleXML

SimpleXMLElement не е само претстава на XML елемент, туку е и RecursiveIterator. Пред PHP 8.4.0, некои од неговите методи (на пр. SimpleXMLElement::asXML() or SimpleXMLElement::getName()) и кастирањето на такви инстанци во string имплицитно би го ресетирало итераторот.

Ова може да предизвика неочекувани бесконечни циклуси бидејќи итераторот беше повторно намотан. На пример:

<?php

$xmlString
= "<root><a><b>1</b><b>2</b><b>3</b></a></root>";
$xml = simplexml_load_string($xmlString);

$nodes = $xml->a->b;
foreach (
$nodes as $nodeData) {
echo
"nodeData: " . $nodeData . "\n";

$xml = $nodes->asXml();
}

би резултирало со бесконечен циклус.

nodeData: 1
nodeData: 2
nodeData: 2
nodeData: 2
nodeData: 2
nodeData: 2
nodeData: 2
// ...

Сепак, ова однесување сега е коригирано, и SimpleXMLElement веќе нема имплицитно да ги ресетира податоците на итераторот, освен ако експлицитно не се намота повторно. Што значи претходниот пример сега би резултирал со:

nodeData: 1
nodeData: 2
nodeData: 3

SOAP

SoapClient::$typemap сега е array отколку resourceсвојство сега е is_resource() променливи за влез is_resource($client->typemap). Проверките користејќи null променливи за влез $client->typemap !== null).

SOAP екстензијата доби опционална зависност од session екстензија. Ако PHP е компајлиран без екстензијата за сесии и со овозможено знаменце за конфигурација, сега ќе се појават грешки при стартување ако се користи и екстензијата. За да го решите ова, или не користете rtld-now или вчитајте ја екстензијата за сесии. --enable-rtld-now празна низа, сега се враќа должината на низата наместо погрешно запирање на првиот бајт нула. SOAP сега правилно ракува со бекд енами.

Стандардно

Кога користите strcspn() with characters инстанца наместо инстанца на

http_build_query() Грешките во конструкторот сега фрлаат исклучоци наместо да емитуваат предупредувања и да имаат скршен објект.

stream_bucket_make_writeable() and stream_bucket_new() сега ќе врати StreamBucket функциите сега декларираат и проверуваат ефективен потпис на stdClass.

Swoole

параметри. Покрај тоа, вредностите од типот

XML

На xml_set_*_handler што одговараат на имињата на методите, од објект поставен со callable|string|null » PEAR handler сега се проверуваат за да се види дали методот постои на класата на претходно поминатиот објект. Ова значи дека string сега мора секогаш да се повикува пред поставување имиња на методи како xml_set_object() s. Сè уште е дозволено поминување празна низа за да се оневозможи ракувачот, но е застарено. xml_set_object() Сепак, како callableи поминување не-

низи е застарено. Се препорачува таквите инстанци да се променат со xml_set_object() што се однесува директно на методот.callable strings is deprecated. It is recommended to change such instances with a callable referring to the method directly.

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.