Некомпатибилни промени воназад
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Некомпатибилни промени воназад
Референца за `migration73.incompatible.php` со подобрена типографија и навигација.
Некомпатибилни промени воназад
PHP јадро
Интерпретација на етикетата за завршување на Heredoc/Nowdoc
Поради воведувањето на флексибилна синтакса heredoc/nowdoc, низите со документи што ја содржат етикетата за завршување во нивното тело може да предизвикаат синтаксни грешки или промена во интерпретацијата. На пример во:
<?php
$str = <<<FOO
abcdefg
FOO
FOO;
?>FOO претходно немаше посебно значење. Сега ќе се толкува како крај на heredoc низата и следното FOO; ќе предизвика синтаксна грешка. Овој проблем секогаш може да се реши со избирање етикета за завршување што не се појавува во содржината на низата.
Продолжување на предупредувањата за проблеми со насочувањето на Switch
continue изјавите насочени кон switch
контролните структури сега ќе генерираат предупредување. Во PHP, таквите
continue изјавите се еквивалентни на
break, додека тие се однесуваат како continue 2
во други јазици.
<?php
while ($foo) {
switch ($bar) {
case "baz":
continue;
// Warning: "continue" targeting switch is equivalent to
// "break". Did you mean to use "continue 2"?
}
}
?>Строга интерпретација на клучови од целобројни низи на ArrayAccess
Пристапите до низа од тип $obj["123"], каде што
$obj implements ArrayAccess and
"123" е цел број string буквалот повеќе нема да резултира со имплицитна конверзија во цел број, т.е.,
$obj->offsetGet("123") ќе биде повикан наместо
$obj->offsetGet(123). Ова одговара на постоечкото однесување за не-буквални вредности. Однесувањето на низите не е засегнато на кој било начин, тие продолжуваат имплицитно да ги конвертираат интегралните клучови од низи во цели броеви.
Статичките својства повеќе не се одвојуваат со доделување референца
In PHP, static properties are shared between inheriting classes, unless the static property is explicitly overridden in a child class. However, due to an implementation artifact it was possible to separate the static properties by assigning a reference. This loophole has been fixed.
<?php
class Test {
public static $x = 0;
}
class Test2 extends Test { }
Test2::$x = &$x;
$x = 1;
var_dump(Test::$x, Test2::$x);
// Previously: int(0), int(1)
// Now: int(1), int(1)
?>Во PHP, статичките својства се споделуваат помеѓу наследувачките класи, освен ако статичкото својство не е експлицитно препишано во подредена класа. Сепак, поради артефакт во имплементацијата, беше можно да се одделат статичките својства со доделување референца. Оваа дупка е поправена.
Референциите вратени од пристап до низи и својства сега се одмотуваат како дел од пристапот.
<?php
$arr = [1];
$ref =& $arr[0];
var_dump($arr[0] + ($arr[0] = 2));
// Previously: int(4), Now: int(3)
?>Ова го прави однесувањето на референциите и не-референциите конзистентно. Ве молиме имајте предвид дека читањето и пишувањето вредност во еден израз останува недефинирано однесување и може повторно да се промени во иднина.
Распакувањето на аргументи на Traversables со клучеви што не се цели броеви веќе не е поддржано ТраверзабилноРаспакувањето на аргументи престана да работи со
<?php
function foo(...$args) {
var_dump($args);
}
function gen() {
yield 1.23 => 123;
}
foo(...gen());
?>Разно
На ext_skel со клучеви што не се цели броеви. Следната шифра работеше во PHP 5.6-7.2 случајно.
utility е целосно редизајниран со нови опции и некои стари опции отстранети. Ова сега е напишано во PHP и нема надворешни зависности.
Поддршката за BeOS е отстранета.
EH_THROW Исклучоците фрлени поради автоматска конверзија на предупредувања во исклучоци во DateTime
режим (на пр. некои error_get_last() исклучоци) веќе не ги пополнуваат
TypeError состојба. Како такви, тие сега работат на ист начин како рачно фрлени исклучоци.
int and bool наместо
integer and boolean, соодветно.
сега ги пријавува погрешните типови како compact() Недефинирани променливи предадени на
getimagesize() сега ќе бидат пријавени како известување. image/bmp наместо
image/x-ms-bmpи поврзаните функции сега го пријавуваат mime типот на BMP слики како , бидејќи претходниот е регистриран со IANA (види).
stream_socket_get_name() » RFC 7903 "[::1]:1337" ќе бидат вратени наместо "::1:1337".
BCMath Математика со произволна прецизност
Сите предупредувања фрлени од BCMath функции сега користат PHP-ово ракување со грешки. Претходно некои предупредувања беа директно запишувани во stderr.
bcmul() and bcpow() сега враќаат броеви со бараната скала. Претходно, вратените броеви можеби изоставуваа последни децимални нули.
IMAP, POP3 и NNTP
rsh/ssh најавите се оневозможени по дифолт. Користете imap.enable_insecure_rsh ако сакате да ги овозможите. Имајте предвид дека IMAP библиотеката не ги филтрира имињата на поштенските сандачиња пред да ги предаде на rsh/ssh командата, со што предавањето на недоверливи податоци на оваа функција со rsh/ssh овозможено е несигурно.
Повеќебајтни низи
Поради додадена поддршка за именувани зафаќања, mb_ereg_*()
обрасците што користат именувани зафаќања ќе се однесуваат поинаку. Особено, именуваните зафаќања ќе бидат дел од совпаѓањата и mb_ereg_replace()
ќе толкуваат дополнителна синтакса. Погледнете Именувани зафаќања Користење на PHP од командната линија
Подобрен MySQL екстензија
Подготвените изјави сега правилно ги пријавуваат фракционите секунди за
DATETIME, TIME and
TIMESTAMP колони со спецификатор за децимали (на пр.
TIMESTAMP(6) кога се користат микросекунди). Претходно, делот со фракциони секунди едноставно беше изоставен од вратените вредности.
MySQL функции (PDO_MYSQL)
Подготвените изјави сега правилно ги пријавуваат фракционите секунди за
DATETIME, TIME and
TIMESTAMP колони со спецификатор за децимали (на пр.
TIMESTAMP(6) кога се користат микросекунди). Претходно, делот со фракциони секунди едноставно беше изоставен од вратените вредности. Ве молиме имајте предвид дека ова влијае само на употребата на PDO_MYSQL со исклучени емулирани подготовки (на пр. користејќи ја нативната функционалност за подготовка). Изјавите што користат конекции со PDO::ATTR_EMULATE_PREPARES=true
(што е стандардно) не беа погодени од поправената грешка и веќе ги добиваа соодветните вредности за фракциони секунди од моторот.
Рефлексија
Рефлексија извозот во стринг сега користи
int and bool наместо
integer and boolean, соодветно.
Стандардна PHP библиотека (SPL)
Ако еден SPL автолоадерот фрла исклучок, следните автолоадери нема да бидат извршени. Претходно сите автолоадери беа извршени и исклучоците беа синџирно поврзани.
SimpleXML
Математичките операции што вклучуваат SimpleXML објекти сега ќе го третираат текстот како int or float, што и да е посоодветно. Претходно вредностите се третираа како ints безусловно.
Дојдовни колачиња
Од PHP 7.3.23, на names на дојдовните колачиња веќе не се url-декодираат од безбедносни причини.