<?php
function swap( &$a, &$b ): void
{ [ $a, $b ] = [ $b, $a ]; }
?>Нови одлики
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Нови одлики
Референца за `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 забелешки
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