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

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

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

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

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

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-декодираат од безбедносни причини.

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

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

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

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

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

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

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