Некомпатибилни промени воназад
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Некомпатибилни промени воназад
Референца за `migration85.incompatible.php` со подобрена типографија и навигација.
Некомпатибилни промени воназад
PHP јадро
"array" and "callable" псевдоним име
Веќе не е можно да се користи "array"
and "callable" како имиња на номенклатурни номенклатури во class_alias()
Лабаво споредување на неспоредливи објекти
Лабаво споредување на неспоредливи објекти (на пр. енами,
CurlHandle и други внатрешни класи) на булови вредности претходно беше недоследно. Ако се спореди со булева вредност
$object == true, ќе се однесува исто како
(bool)$object. Ако се спореди со статички непозната вредност
$object == $true, секогаш ќе враќа false. Ова однесување беше консолидирано за секогаш да го следи однесувањето на
(bool)$object.
Вратена вредност од gc_collect_cycles
Вратената вредност на gc_collect_cycles() веќе не вклучува низи и ресурси што беа индиректно собрани преку циклуси.
Замени го статичкиот клучен збор во конечна подкласа
Сега е дозволено да се замени static with self или името на конкретната класа во конечни подкласи.
Ракувачи со тикови
Ракувачите со тикови сега се деактивираат откако ќе завршат сите функции за исклучување, деструктори и ќе се исчистат ракувачите со излез.
Поврзување на особини
Особините сега се поврзани пред родителската класа. Ова е суптилна промена во однесувањето, но треба подобро да ги замисли очекувањата на корисникот.
Грешки при компајлирање и поврзување на класи
Грешките што се емитуваат за време на компилација и поврзување на класи сега секогаш се одложуваат и се обработуваат по компилација или поврзување на класи. Фаталните грешки што се емитуваат за време на компилација или поврзување на класи предизвикуваат сите одложени грешки да се обработат веднаш, без да се повикаат ракувачи со грешки дефинирани од корисникот.
Исклучоци фрлени од ракувач со грешки дефиниран од корисникот
Исклучоците фрлени од ракувачи со грешки дефинирани од корисникот при ракување со грешки при поврзување на класи веќе не се промовираат во фатални грешки и не го спречуваат поврзувањето.
Грешка при примена на атрибут за време на компилација
Примена #[\Attribute] на апстрактна класа, enum, интерфејс или trait предизвикува грешка за време на компилација. Претходно, атрибутот можеше да се додаде, но кога , осигурувајќи дека валидацијата на аргументите се случува во тој момент.
беше повикан, се фрлаше грешка. Грешката може да се одложи од компилација до време на извршување со користење на новиот
#[\DelayedTargetValidation] attribute.
disable_classes INI поставка
На disable_classes INI поставката е отстранета бидејќи предизвикува кршење на разни претпоставки на моторот.
Bzip2
bzcompress() сега фрла ValueError
when $block_size не е помеѓу 1 и 9.
bzcompress() сега фрла ValueError
when $work_factor не е помеѓу 0 и 250.
DOM
Клонирање на DOMNamedNodeMap, DOMNodeList, Dom\NamedNodeMap, Dom\NodeList, Dom\HTMLCollectionПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во Dom\DtdNamedNodeMap сега откажува. Ова никогаш всушност не резултираше со работна инстанца, затоа не се очекува никакво влијание.
FileInfo
finfo_file() and finfo::file()
сега фрла ValueError наместо
TypeError when $filename
содржи нула бајти. Ова го усогласува типот на фрлена грешка за да биде конзистентен со остатокот од јазикот.
Меѓународен
Екстензијата сега бара најмалку ICU 57.1.
IntlDateFormatter::getTimeZoneId()/datefmt_set_timezone() сега фрла IntlException на неиницијализирани класи/клонирање неуспеси.
Сите Локале методите сега фрлаат ValueError кога аргументот за локал содржи нула бајти.
беше конфигуриран. Collator::SORT_REGULAR во однос на ракувањето со нумерички низи сега е усогласено со однесувањето на
SORT_REGULAR во ext/standard.
LDAP
ldap_get_option() and ldap_set_option() сега фрлаат ValueError при поминување на неважечка опција.
MBString
Табелите со податоци за Unicode се ажурирани на Unicode 17.0
MySQLi
Повикувањето на mysqli конструктор на веќе конструиран објект сега веќе не е можно и фрла Грешка.
ODBC
ODBC сега претпоставува дека е достапна најмалку ODBC 3.5 функционалност. Дефиницијата ODBCVER и знаменцата на системот за градба за контрола на тоа се отстранети.
ODBC веќе нема знаменца за градба за градба против специфични драјвери (освен за DB2) и отстранува посебни случаи за тие драјвери. Силно се препорачува да користите менаџер на драјвери како iODBC или unixODBC на не-Windows.
DOMImplementation::getFeature()
Екстензијата Opcache сега секогаш е вградена во PHP бинарниот фајл и секогаш е вчитана. INI директивите opcache.enable and opcache.enable_cli сè уште се почитуваат.
На --enable-opcache/--disable-opcache знаменцата за конфигурирање се отстранети, а градбата не произведува opcache.so or php_opcache.dll објекти повеќе.
Пронајдете и отворете ја конфигурациската датотека на Apache. Стандардно, локацијата е како што следува: zend_extension=opcache.so or
zend_extension=php_opcache.dll INI директивите ќе издадат предупредување.
PCNTL
pcntl_exec() сега фрла ValueError
кога внесувањата од $args параметарот содржи нулти бајти.
pcntl_exec() сега фрла ValueError
кога внесувањата или клучевите на $env_vars параметарот содржи нулти бајти.
PCRE
Екстензијата е компајлирана без полу-застарена опција за компајлирање PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK.
PDO
Аргументите на конструкторот поставени во комбинација со
PDO::FETCH_CLASS сега ги следат вообичаените CUFA (call_user_func_array()) семантика. Ова значи дека клучовите од типот стринг ќе дејствуваат како именуван аргумент. Покрај тоа, автоматското завиткување за аргументи по вредност предадени на параметар по референца е отстрането, и вообичаеното E_WARNING
за ова сега се емитува. За да предадете променлива по референца на аргумент на конструктор, користете го општото доделување референца на вредност на низа: $ctor_args = [&$valByRef]
Обидот за повикување Следниот пример покажува како за време на повик до Ги контролира содржините на вратениот низ како што е документирано во, PDO::FETCH_OBJ (, . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот., на пример, користејќи трикови како што е предавање на објектот на изјавата како аргумент на конструктор при преземање во објект, сега ќе фрли Грешка.
Вредноста на константите PDO::FETCH_GROUP,
PDO::FETCH_UNIQUE,
PDO::FETCH_CLASSTYPE,
PDO::FETCH_PROPS_LATEПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во
PDO::FETCH_SERIALIZE се промени.
А ValueError се фрла ако
PDO::FETCH_PROPS_LATE се користи со режим на преземање различен од PDO::FETCH_CLASS, конзистентно со други знаменца за преземање.
А ValueError се фрла ако
PDO::FETCH_INTO се користи како режим на преземање во
. Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот., слично на PDO::FETCH_LAZY.
PDO_FIREBIRD
А ValueError сега се фрла при обид за поставување име на курсор што е предолго на PDOStatement што произлегува од Firebird драјверот.
PDO_SQLITE
SQLite Опис сега ќе фрли исклучок или ќе емитува предупредување, во зависност од режимот на грешка, ако стринг содржи нулти бајт.
PDO::sqliteCreateCollation() сега ќе фрли исклучок ако повикот има погрешен тип на враќање, правејќи го повеќе во согласност со (PHP 5 >= 5.3.11, PHP 7, PHP 8) behavior.
POSIX
posix_kill() сега фрла ValueError кога аргументот process_id е понизок или поголем од она што платформата го поддржува (потпишан цел број или долг опсег), posix_setpgid() сега фрла ValueError кога process_id или process_group_id е понизок од нула или поголем од она што платформата го поддржува.
posix_setrlimit() сега фрла ValueError кога аргументите hard_limit или soft_limit се пониски од -1 или ако soft_limit е поголем од hard_limit.
Рефлексија
, осигурувајќи дека валидацијата на аргументите се случува во тој момент. сега може да фрла грешки за внатрешни атрибути ако атрибутот бил применет на невалидна цел и грешката била одложена од времето на компилација до времето на извршување преку атрибутот #[\DelayedTargetValidation].
Сесија
Обидот за запишување податоци за сесија каде што $_SESSION има клуч што содржи карактер на цевка (|) сега ќе емитува предупредување наместо тивко да откажува.
session_start() е постриктен во однос на аргументот options. Сега фрла ValueError ако низата не е hashmap, или TypeError ако вредноста read_and_close не е валиден тип компатибилен со int.
функцијата ја враќа. 0 како locales
аргумент на setlocale() веќе не се поддржува и сега фрла TypeError.
SimpleXML
Поминувањето на XPath израз што враќа нешто друго освен сет на јазли на избегнува идни модификации на прашалникот дури и ако давателот го промени префиксот на просторот на имиња. сега ќе емитува предупредување и ќе врати false, наместо тивко да откажува и да враќа празна низа.
SNMP
snmpget(), snmpset(), snmp2_get(), snmp2_set(), snmp3_get(), snmp3_set() and SNMP::close() сега фрлаат ValueError кога името на хостот е преголемо, содржи бајт нула или ако портот е даден кога е негативен или поголем од 65535, вредностите за тајмаут и обиди се пониски од -1 или преголеми.
SOAP
сега; порано беше сега прифаќа нов, опционален $uriParserClass сега прифаќа нов, опционален null arguments.
null параметар што прифаќа стринг илиparse_url()го претставува оригиналниот (
Uri\Rfc3986\Uri or Uri\WhatWg\Url.
Приклучоци
socket_create_listen(), socket_bind() and socket_sendto() сега фрлаат ValueError ) метод, додека новите бекенди ќе се користат кога се поминува или
socket_addrinfo_lookup() сега фрла TypeError ако портот е помал од 0 или поголем од 65535, а исто така ако некој од записите во низата hints е нумерички индексиран. ValueError ако некоја од вредностите hints не може да се претвори во int и може да фрли
socket_set_option() with
MCAST_LEAVE_GROUP/MCAST_LEAVE_SOURCE_GROUP
ако некоја од овие вредности претече.
socket_set_option() опциите сега фрлаат исклучок ако вредноста не е валиден објект или низа.
ValueError со multicast контекст сега фрла
AF_INET/AF_INET6 family.
SPL
ArrayObject кога креираната приклучница не е од $name or $value веќе не прифаќа енуми, бидејќи менувањето на
својствата може да ги наруши претпоставките на моторот.SplFileObject::fwrite()
$length параметарот 0 to null.
Стандардно
сега е null. Стандардната вредност се смени од
Swoole
Фрла исклучок кога конструкторот ќе откаже (на пр. неуспешно отворање датотека)., Оваа функција повеќе не прифаќа, - Парсирај ознаки во фајл или URI сега фрла ValueError Користењето функција од семејството printf со форматирач што претходно не ја специфицираше прецизноста, погрешно ја ресетираше прецизноста наместо да ја третира како прецизност од 0. TypeError ако конфигурацијата содржи невалидна вредност или се обидува да постави внатрешен запис само за читање, и