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

Нови одлики

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

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

Референца за `migration71.new-features.php` со подобрена типографија и навигација.

migration71.new-features.php

Нови одлики

Null типы

Декларациите на типови за параметри и вратени вредности сега можат да бидат означени како null со додавање на знак прашалник пред името на типот. Ова означува дека покрај наведениот тип, null може да се предаде како аргумент, или да се врати како вредност, соодветно.

<?php

function testReturnA(): ?string
{
return
'elePHPant';
}

var_dump(testReturnA());

function
testReturnB(): ?string
{
return
null;
}

var_dump(testReturnB());

function
test(?string $name)
{
var_dump($name);
}

test('elePHPant');
test(null);
test();

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

string(9) "elePHPant"
NULL
string(9) "elePHPant"
NULL
Fatal error: Uncaught ArgumentCountError: Too few arguments to function test(), 0 passed in...

Void функции

А void тип на враќање е воведен. Функциите декларирани со void како тип на враќање мора или целосно да го изостават својот return исказ, или да користат празен return исказ. null не е валидна вратена вредност за void функција.

<?php
function swap(&$left, &$right): void
{
if (
$left === $right) {
return;
}

$tmp = $left;
$left = $right;
$right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

null
int(2)
int(1)

Обидот да се користи вратената вредност на void функција едноставно се проценува како null, без да се емитуваат предупредувања. Причината за ова е што предупредувањата би подразбирале употреба на генерички функции од повисок ред.

Симетрично деструктурирање на низи

Синтаксата за кратка низа ([]) сега може да се користи за деструктурирање на низи за доделување (вклучително и во foreach), како алтернатива на постоечката list() синтаксис, која сè уште е поддржана.

<?php
$data
= [
[
1, 'Tom'],
[
2, 'Fred'],
];

// list() style
list($id1, $name1) = $data[0];

// [] style
[$id1, $name1] = $data[0];

// list() style
foreach ($data as list($id, $name)) {
// logic here with $id and $name
}

// [] style
foreach ($data as [$id, $name]) {
// logic here with $id and $name
}

Видливост на константите во класата

Додадена е поддршка за специфицирање на видливоста на константите во класата.

<?php
class ConstDemo
{
const
PUBLIC_CONST_A = 1;
public const
PUBLIC_CONST_B = 2;
protected const
PROTECTED_CONST = 3;
private const
PRIVATE_CONST = 4;
}

iterable pseudo-type

Воведен е нов псевдо-тип (сличен на callable) наречен iterable Тој може да се користи во типови на параметри и враќање, каде што прифаќа или низи или објекти што ја имплементираат Траверзабилно интерфејс. Во однос на подтипирање, типовите на параметри на подкласите можат да ја прошират декларацијата на родителот за array or Траверзабилно to iterable. Со типови на враќање, подкласите можат да го стеснат типот на враќање на родителот од iterable to array или објект што имплементира Траверзабилно.

<?php
function iterator(iterable $iter)
{
foreach (
$iter as $val) {
//
}
}

Повеќекратно ракување со исклучоци

Multiple exceptions per catch block may now be specified using the pipe character (|). This is useful for when different exceptions from different class hierarchies are handled the same.

<?php
try {
// some code
} catch (FirstException | SecondException $e) {
// handle first and second exceptions
}

Поддршка за клучеви во list()

Сега можете да наведете клучеви во list(), или неговиот нов кратен збор [] синтаксис. Ова овозможува деструктурирање на низи со нецелобројни или несеквенцијални клучеви.

<?php
$data
= [
[
"id" => 1, "name" => 'Tom'],
[
"id" => 2, "name" => 'Fred'],
];

// list() style
list("id" => $id1, "name" => $name1) = $data[0];

// [] style
["id" => $id1, "name" => $name1] = $data[0];

// list() style
foreach ($data as list("id" => $id, "name" => $name)) {
// logic here with $id and $name
}

// [] style
foreach ($data as ["id" => $id, "name" => $name]) {
// logic here with $id and $name
}

Поддршка за негативни офсети на низи

Поддршка за негативни офсети на низи е додадена на функции за манипулација со низи прифаќање офсети, како и на индексирање на низи with [] or {}. Во такви случаи, негативниот офсет се толкува како офсет од крајот на низата.

<?php
var_dump
("abcdef"[-2]);
var_dump(strpos("aabbcc", "b", -3));

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

string (1) "e"
int(3)

Негативните офсети на низи и низи сега се поддржани и во едноставната синтакса за парсирање на променливи внатре во низи.

<?php
$string
= 'bar';
echo
"The last character of '$string' is '$string[-1]'.\n";
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

The last character of 'bar' is 'r'.

Поддршка за AEAD во ext/openssl

Поддршка за AEAD (режими GCM и CCM) е додадена со проширување на openssl_encrypt() and openssl_decrypt() функции со дополнителни параметри.

Конвертирај повикливи во Затворањеи со има исти семантики како

A new static method has been introduced to the Затворање Воведена е нова статичка метода во класата за лесно конвертирање на callableво Затворање objects.

<?php
class Test
{
public function
exposeFunction()
{
return
Closure::fromCallable([$this, 'privateFunction']);
}

private function
privateFunction($param)
{
var_dump($param);
}
}

$privFunc = (new Test)->exposeFunction();
$privFunc('some value');

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

string(10) "some value"

Асинхроно ракување со сигнали

Воведена е нова функција наречена pcntl_async_signals() за да се овозможи асинхроно ракување со сигнали без користење на тикови (кои внесуваат многу дополнителни трошоци).

<?php
pcntl_async_signals
(true); // turn on async signals

pcntl_signal(SIGHUP, function($sig) {
echo
"SIGHUP\n";
});

posix_kill(posix_getpid(), SIGHUP);

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

SIGHUP

HTTP/2 server push поддршка во ext/curl

Поддршката за server push е додадена во екстензијата CURL (бара верзија 7.46 и погоре). Ова може да се искористи преку функцијата со новата константа curl_multi_setopt() Константите CURLMOPT_PUSHFUNCTION исто така се додадени за да може да се одобри или одбие извршувањето на callback функцијата за server push. CURL_PUSH_OK and CURL_PUSH_DENY Stream Context Options

опцијата за stream context е додадена.

На tcp_nodelay stream context option has been added.

Белешки од корисници 2 забелешки

DYM
пред 7 години
<?php
function swap( &$a, &$b ): void
  { [ $a, $b ] = [ $b, $a ]; }
?>
unti1x
пред 7 години
Note that declaring nullable return type does not mean that you can skip return statement at all. For example:

php > function a(): ?string { }
php > a();
PHP Warning:  Uncaught TypeError: Return value of a() must be of the type string or null, none returned in php shell code:2

php > function b(): ?string { return; }
PHP Fatal error:  A function with return type must return a value (did you mean "return null;" instead of "return;"?) in php shell code on line 2
На оваа страница

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

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

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

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

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