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

Нови одлики

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

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

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

migration70.new-features.php

Нови одлики

Декларации за скаларни типови

Скаларен декларации на типови доаѓаат во два вида: коерцивни (по дифолт) и строги. Следниве типови за параметри сега можат да се применат (или коерсивно или строго): низи (string), цели броеви (int), броеви со пловечка точка (float), и булови вредности (bool). Тие ги надополнуваат другите типови воведени во PHP 5: имиња на класи, интерфејси, array and callable.

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
return
array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));

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

int(9)

За да се овозможи строг режим, еден declare директива мора да биде поставена на врвот на датотеката. Ова значи дека строгоста на типовите за скалари се конфигурира на база на датотека. Оваа директива влијае не само на декларациите на типовите на параметрите, туку и на типот на вратената вредност на функцијата (види декларации за тип на враќање), вградени PHP функции и функции од вчитани екстензии.

Целосна документација и примери за декларации на скаларни типови може да се најдат во . Секоја друга reference.

Декларации за тип на враќање

PHP 7 додава поддршка за декларации за тип на враќање. Слично на декларации за тип на аргумент, декларациите за тип на враќање специфицираат тип на вредност што ќе биде вратена од функција. Истите types се достапни за декларации за тип на враќање како што се достапни за декларации за тип на аргумент.

<?php

function arraysSum(array ...$arrays): array
{
return
array_map(function(array $array): int {
return
array_sum($array);
},
$arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

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

Array
(
    [0] => 6
    [1] => 15
    [2] => 24
)

Целосна документација и примери за декларации за тип на враќање може да се најдат во декларации за тип на враќање. референца.

Оператор за збивање на нула

Операторот за збивање на нула (??) е додаден како синтаксичко шеќер за честата потреба од користење на тернарна операција во комбинација со isset(). Враќа првиот операнд ако постои и не е null; инаку го враќа вториот операнд.

<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

// Coalescing can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>

Оператор за вселенски брод

Операторот за вселенски брод се користи за споредување на два изрази. Враќа -1, 0 или 1 кога $a е соодветно помал од, еднаков на или поголем од $b. Споредбите се вршат според вообичаените PHP правила за споредба на типови.

<?php
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>

Константни низи користејќи define()

Низа константи сега можат да се дефинираат со define(). Во PHP 5.6, тие можеа да се дефинираат само со const.

<?php
define
('ANIMALS', [
'dog',
'cat',
'bird'
]);

echo
ANIMALS[1]; // outputs "cat"
?>

Анонимни класи

Поддршката за анонимни класи е додадена преку new class. Тие можат да се користат наместо целосни дефиниции на класи за еднократни објекти:

<?php
interface Logger {
public function
log(string $msg);
}

class
Application {
private
$logger;

public function
getLogger(): Logger {
return
$this->logger;
}

public function
setLogger(Logger $logger) {
$this->logger = $logger;
}
}

$app = new Application;
$app->setLogger(new class implements Logger {
public function
log(string $msg) {
echo
$msg;
}
});

var_dump($app->getLogger());
?>

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

object(class@anonymous)#2 (0) {
}

Целосна документација може да се најде во референца за анонимни класи.

Синтакса за бегство од Unicode кодно точка

Ова зема Unicode кодна точка во хексадецимална форма и ја испишува таа кодна точка во UTF-8 во двојно наводна низа или heredoc. Се прифаќа секоја валидна кодна точка, со опционални водечки 0.

<?php

echo "\u{aa}", PHP_EOL;
echo
"\u{0000aa}", PHP_EOL;

echo
"\u{9999}", PHP_EOL;

echo <<<EOT
\u{01f418}
EOT;

?>

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

ª
ª (same as before but with optional leading 0's)
香

Closure::call()

Closure::call() е поефикасен, кратен начин за привремено врзување на опсегот на објектот со затворање и негово повикување.

<?php
class A {private $x = 1;}

// Pre PHP 7 code
$getX = function() {return $this->x;};
$getXCB = $getX->bindTo(new A, 'A'); // intermediate closure
echo $getXCB();

// PHP 7+ code
$getX = function() {return $this->x;};
echo
$getX->call(new A);

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

1
1

Филтрирано unserialize()

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

<?php

// converts all objects into __PHP_Incomplete_Class object
$data = unserialize($foo, ["allowed_classes" => false]);

// converts all objects into __PHP_Incomplete_Class object except those of MyClass and MyClass2
$data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]]);

// default behaviour (same as omitting the second argument) that accepts all classes
$data = unserialize($foo, ["allowed_classes" => true]);

IntlChar

Новиот IntlChar класата има за цел да изложи дополнителна ICU функционалност. Самата класа дефинира голем број статични методи и константи што можат да се користат за манипулирање со unicode знаци.

<?php

printf
('%x', IntlChar::CODEPOINT_MAX);
echo
IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));

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

10ffff
COMMERCIAL AT
bool(true)

За да се користи оваа класа, Меѓународен мора да биде инсталирана екстензијата.

Очекувања

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

Додека стариот API продолжува да се одржува за компатибилност, assert() сега е програмски конструктор, дозволувајќи првиот параметар да биде израз наместо само string да се процени или bool вредност за тестирање.

<?php
ini_set
('assert.exception', 1);

class
CustomError extends AssertionError {}

assert(false, new CustomError('Some error message'));
?>

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

Fatal error: Uncaught CustomError: Some error message

Целосни детали за оваа функција, вклучително и како да се конфигурира во средини за развој и продукција, може да се најдат на страницата за рачно управување на assert() конструкцијата на јазикот.

Група use declarations

Класите, функциите и константите што се увезуваат од истото namespace сега можат да се групираат заедно во еден use statement.

<?php
// Pre PHP 7 code
use some\namespace\ClassA;
use
some\namespace\ClassB;
use
some\namespace\ClassC as C;

use function
some\namespace\fn_a;
use function
some\namespace\fn_b;
use function
some\namespace\fn_c;

use const
some\namespace\ConstA;
use const
some\namespace\ConstB;
use const
some\namespace\ConstC;

// PHP 7+ code
use some\namespace\{ClassA, ClassB, ClassC as C};
use function
some\namespace\{fn_a, fn_b, fn_c};
use const
some\namespace\{ConstA, ConstB, ConstC};
?>

Изрази за враќање на генераторот

Оваа функција се надградува на функционалноста на генераторот воведена во PHP 5.5. Таа овозможува return изјава да се користи во генератор за да се овозможи враќање на конечен израз (враќање по референца не е дозволено). Оваа вредност може да се добие со помош на новиот Generator::getReturn() метод, кој може да се користи само откако генераторот ќе заврши со давање вредности.

<?php

$gen
= (function() {
yield
1;
yield
2;

return
3;
})();

foreach (
$gen as $val) {
echo
$val, PHP_EOL;
}

echo
$gen->getReturn(), PHP_EOL;

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

1
2
3

Можноста за експлицитно враќање на последната вредност од генератор е корисна способност. Ова е затоа што овозможува враќање на последната вредност од генератор (можеби од некој вид корутинско пресметување) што може конкретно да се обработи од клиентскиот код што го извршува генераторот. Ова е многу поедноставно отколку да се принуди клиентскиот код прво да провери дали последната вредност е дадена, а потоа, ако е така, да се обработи таа вредност конкретно.

Делегирање на генератор

Генераторите сега можат да делегираат на друг генератор, Траверзабилно објект или array автоматски, без потреба да се пишува дополнителен код во најоддалечениот генератор користејќи го yield from construct.

<?php
function gen()
{
yield
1;
yield
2;
yield from
gen2();
}

function
gen2()
{
yield
3;
yield
4;
}

foreach (
gen() as $val)
{
echo
$val, PHP_EOL;
}
?>

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

1
2
3
4

Целобројно делење со intdiv()

Новиот intdiv() функцијата врши целобројно делење на своите операнди и ја враќа. "

<?php
var_dump
(intdiv(10, 3));
?>

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

int(3)

Опции за сесија

session_start() сега прифаќа array од опции што ги надминуваат директиви за конфигурација на сесијата нормално поставени во php.ini.

Овие опции исто така беа проширени за да поддржат session.lazy_write, што е вклучено по дифолт и предизвикува PHP да презапише само датотека за сесија ако податоците од сесијата се променети, и read_and_close, што е опција што може да се помине само на session_start() за да се означи дека податоците од сесијата треба да се прочитаат и потоа сесијата веднаш да се затвори непроменета.

На пример, за да се постави session.cache_limiter to private и веднаш да се затвори сесијата по нејзиното читање:

<?php
session_start
([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>

preg_replace_callback_array()

Новиот preg_replace_callback_array() функцијата овозможува кодот да се пишува почисто кога се користи preg_replace_callback() функција. Пред PHP 7, повиците што требаше да се извршат по регуларен израз бараа функцијата за повикување да биде загадена со многу разгранување.

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

CSPRNG функции

Додадени се две нови функции за генерирање криптографски сигурни цели броеви и низи на податоци на крос-платформски начин: random_bytes() and random_int().

list() секогаш може да ги распакува објектите што имплементираат ArrayAccess

Претходно, list() не беше загарантирано дека ќе работи правилно со објекти што имплементираат ArrayAccess. Ова е поправено.

Други карактеристики

  • Додаден е пристап до членовите на класата при клонирање, на пр. (clone $foo)->bar().

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

Адријан Виик
пред 6 години
A good rule of thumb for remembering what the spaceship operator expression returns is to replace the spaceship operator with a minus sign (-). If the result is negative, 0 or positive, the expression will return -1, 0 or 1 respectively.

Example:
<?php
echo 5 <=> 8; // 5 - 8 = -3, prints -1
echo 2 <=> 2; // 2 - 2 = 0, prints 0
echo 4 <=> 2; // 4 - 2 = 2, prints 1
Јулијан Савицки
пред 5 години
In php 7.0 it's possible to curry functions in a way that's similar to JavaScript.

<?php

// A curried function
function add($a) {
  return function($b) use ($a) {
    return $a + $b;
  };
}

// Invoking curried function in PHP 7 
$result = add(10)(15);

var_dump($result); // int 25

?>

Currying in this way is not possible in php 5.6.
rshaw8k na yahoo dot com
пред 1 година
As a finding aid, here is the ordered list of section titles on this page:

     Scalar type declarations
     Return type declarations
     Null coalescing operator
     Spaceship operator
     Constant arrays using define()
     Anonymous classes
     Unicode codepoint escape syntax
     Closure::call()
     Filtered unserialize()
     IntlChar
     Expectations
     Group use declarations
     Generator Return Expressions
     Generator delegation
     Integer division with intdiv()
     Session options
     preg_replace_callback_array()
     CSPRNG Functions
     list() can always unpack objects implementing ArrayAccess
     Other Features
На оваа страница

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

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

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

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

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