Heim > Backend-Entwicklung > PHP7 > Neue Funktionen von PHP5.5 bis PHP7.2

Neue Funktionen von PHP5.5 bis PHP7.2

藏色散人
Freigeben: 2023-02-17 11:38:02
nach vorne
3644 Leute haben es durchsucht


1. Portierung von PHP 5.5.x auf PHP 5.6.x

Verwenden Sie Ausdrucksdefinitionskonstanten

In früheren Versionen von PHP mussten statische Werte verwendet werden, um Konstanten zu definieren, Eigenschaften zu deklarieren und Standardwerte für Funktionsparameter anzugeben. Sie können jetzt numerische Ausdrücke wie Zahlen, Zeichenfolgenliterale und andere Konstanten verwenden, um Konstanten zu definieren, Eigenschaften zu deklarieren und Standardwerte für Funktionsparameter festzulegen.

<?php
const ONE = 1;
const TWO = ONE * 2;
class C {
    const THREE = TWO + 1;
    const ONE_THIRD = ONE / self::THREE;
    const SENTENCE = &#39;The value of THREE is &#39;.self::THREE;
}
Nach dem Login kopieren

kann jetzt Konstanten vom Typ const über das Schlüsselwort array definieren.

<?php
const ARR = [&#39;a&#39;, &#39;b&#39;];
echo ARR[0];
Nach dem Login kopieren

Verwenden Sie den ... -Operator, um eine Parameterfunktion variabler Länge zu definieren

Sie können jetzt den func_get_args()-Operator verwenden, um eine Parameterfunktion variabler Länge zu implementieren ohne sich auf ... verlassen zu müssen.

<?php
function f($req, $opt = null, ...$params) {
    // $params 是一个包含了剩余参数的数组
    printf(&#39;$req: %d; $opt: %d; number of params: %d&#39;."\n",
           $req, $opt, count($params));
}
f(1);
f(1, 2);
f(1, 2, 3);
f(1, 2, 3, 4);
?>
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

$req: 1; $opt: 0; number of params: 0
$req: 1; $opt: 2; number of params: 0
$req: 1; $opt: 2; number of params: 1
$req: 1; $opt: 2; number of params: 2
Nach dem Login kopieren

Verwenden Sie den ... -Operator für die Parametererweiterung

Verwenden Sie beim Aufrufen einer Funktion ... Operator, erweitert Arrays und iterierbare Objekte in Funktionsargumente. In anderen Programmiersprachen wie Ruby wird dies als Verkettungsoperator bezeichnet.

<?php
function add($a, $b, $c) {
    return $a + $b + $c;
}
$operators = [2, 3];
echo add(1, ...$operators);
?>
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

6
Nach dem Login kopieren

use function und use const

use-Operator wurde erweitert, um den Import externer Funktionen zu unterstützen und Konstanten in die Klasse. Die entsprechenden Strukturen sind use function und use const.

<?php
namespace Name\Space {
    const FOO = 42;
    function f() { echo __FUNCTION__."\n"; }
}
namespace {
    use const Name\Space\FOO;
    use function Name\Space\f;
    echo FOO."\n";
    f();
}
?>
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

42
Name\Space\f
Nach dem Login kopieren

Verwenden Sie hash_equals(), um Zeichenfolgen zu vergleichen, um Timing-Angriffe zu vermeiden

2. Portierung von PHP 5.6.x nach PHP 7.0 .x

Skalare Typdeklaration

Skalare Typdeklarationen haben zwei Modi: obligatorisch (Standard) und strikt. Die folgenden Typparameter sind jetzt verfügbar (entweder im erzwungenen oder strikten Modus): string, int, float und bool.

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}
var_dump(sumOfInts(2, &#39;3&#39;, 4.1));
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

int(9)
Nach dem Login kopieren

Deklaration des Rückgabewerttyps

PHP 7 fügt Unterstützung für die Deklaration des Rückgabetyps hinzu. Ähnlich wie die Parametertypdeklaration gibt die Rückgabetypdeklaration den Typ des Rückgabewerts der Funktion an. Die verfügbaren Typen sind dieselben wie die in der Parameterdeklaration verfügbaren.

<?php
function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}
Nach dem Login kopieren

Null-Koaleszieroperator

Aufgrund der großen Anzahl von Situationen, in denen ternäre Ausdrücke und isset() im täglichen Gebrauch gleichzeitig verwendet werden, haben wir den Null-Koaleszieroperator hinzugefügt ( ??) Dieser syntaktische Zucker. Wenn die Variable existiert und nicht NULL ist, gibt sie ihren eigenen Wert zurück, andernfalls gibt sie ihren zweiten Operanden zurück.

<?php
// Fetches the value of $_GET[&#39;user&#39;] and returns &#39;nobody&#39; if it does not exist.
$username = $_GET[&#39;user&#39;] ?? &#39;nobody&#39;;
// This is equivalent to:
$username = isset($_GET[&#39;user&#39;]) ? $_GET[&#39;user&#39;] : &#39;nobody&#39;;
// Coalesces can be chained: this will return the first defined value out of $_GET[&#39;user&#39;], $_POST[&#39;user&#39;], and &#39;nobody&#39;.
$username = $_GET[&#39;user&#39;] ?? $_POST[&#39;user&#39;] ?? &#39;nobody&#39;;
?>
Nach dem Login kopieren

Raumschiffoperator (Kombinationsvergleichsoperator)

Der Raumschiffoperator wird verwendet, um zwei Ausdrücke zu vergleichen. Es gibt -1, 0 oder 1 zurück, wenn $a kleiner, gleich oder größer als $b ist. Das Vergleichsprinzip folgt den regulären Vergleichsregeln von PHP.

<?php
// 整数
echo 1 <=> &#39;1&#39;; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// 浮点数
echo &#39;1.50&#39; <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
 
// 字符串
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
?>
Nach dem Login kopieren

Konstanten-Array definieren über define()

Konstanten vom Typ Array können jetzt über define() definiert werden. In PHP5.6 kann es nur über const definiert werden.

define(&#39;ANIMALS&#39;, [
    &#39;dog&#39;,
    &#39;cat&#39;,
    &#39;bird&#39;
]);
echo ANIMALS[1]; // 输出 "cat"
Nach dem Login kopieren

Closure::call()

Closure::call() bietet jetzt eine bessere Leistung und eine kurze und prägnante Möglichkeit, eine Methode vorübergehend an den Objektabschluss zu binden und ihn aufzurufen Es.

<?php
class A {private $x = 1;}
// PHP 7 之前版本的代码
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, &#39;A&#39;); // 中间层闭包
echo $getX();
// PHP 7+ 及更高版本的代码
$getX = function() {return $this->x;};
echo $getX->call(new A);
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

1
Nach dem Login kopieren

Gruppenverwendungsanweisung

Klassen, Funktionen und Konstanten, die aus derselben namespace importiert wurden, können jetzt auf einmal mit einer einzigen importiert werden use-Anweisung.

<?php
// PHP 7 之前的代码
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+ 及更高版本的代码
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};
?>
Nach dem Login kopieren

Generatoren können Ausdrücke zurückgeben

Diese Funktion baut auf der in PHP 5.5 eingeführten Generatorfunktion auf. Sie können einen Ausdruck zurückgeben (aber nicht die Rückgabe eines Referenzwerts), indem Sie die Rückgabesyntax in einer Generatorfunktion verwenden. Sie können den Rückgabewert des Generators erhalten, indem Sie die Methode Generator::getReturn() aufrufen Diese Methode kann nur beim Generieren verwendet werden. Wird einmal aufgerufen, nachdem der Prozessor die Generierung der Arbeit abgeschlossen hat.

Ganzzahldivisionsfunktion intdiv()

3. Migration von PHP 7.0.x auf PHP 7.1.x

Nullable-Typen

Die Typen von Parametern und Rückgabewerten können jetzt nullbar sein, indem vor dem Typ ein Fragezeichen hinzugefügt wird. Wenn diese Funktion aktiviert ist, sind die übergebenen Parameter oder das von der Funktion zurückgegebene Ergebnis entweder vom angegebenen Typ oder null .

<?php
function testReturn(): ?string
{
    return &#39;elePHPant&#39;;
}
var_dump(testReturn());
function testReturn(): ?string
{
    return null;
}
var_dump(testReturn());
function test(?string $name)
{
    var_dump($name);
}
test(&#39;elePHPant&#39;);
test(null);
test();
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

string(10) "elePHPant"
NULL
string(10) "elePHPant"
NULL
Uncaught Error: Too few arguments to function test(), 0 passed in...
Nach dem Login kopieren

Void-Funktion

Ein neuer Rückgabewerttyp void wird eingeführt. Methoden, deren Rückgabewert als void-Typ deklariert ist, müssen entweder die return-Anweisung ganz weglassen oder eine leere return-Anweisung verwenden. NULL ist kein zulässiger Rückgabewert für Void-Funktionen.

<?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);
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

null
int(2)
int(1)
Symmetric array destructuring
Nach dem Login kopieren

Die kurze Array-Syntax ([]) ist jetzt eine Alternative zur list()-Syntax und kann verwendet werden, um den Wert des Arrays zuzuweisen einige Variablen (in foreach enthalten).

<?php
$data = [
    [1, &#39;Tom&#39;],
    [2, &#39;Fred&#39;],
];
// 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
}
Nach dem Login kopieren

Sichtbarkeit von Klassenkonstanten

Unterstützt jetzt das Festlegen der Sichtbarkeit von Klassenkonstanten.

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

<code><strong>iterable</strong>iterierbarPseudoklasse

<🎜>

现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。

<?php
function iterator(iterable $iter) : iterable
{
    foreach ($iter as $val) {
        //
    }
}
Nach dem Login kopieren

多异常捕获处理

一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。

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

list()现在支持键名

现在list()和它的新的[]语法支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)

<?php
$data = [
    ["id" => 1, "name" => &#39;Tom&#39;],
    ["id" => 2, "name" => &#39;Fred&#39;],
];
// 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
}
Nach dem Login kopieren

四、从PHP 7.1.x 移植到 PHP 7.2.x

新的对象类型

这种新的对象类型, object, 引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。

<?php
function test(object $obj) : object
{
    return new SplQueue();
}
test(new StdClass());
Nach dem Login kopieren

允许重写抽象方法(Abstract method)

当一个抽象类继承于另外一个抽象类的时候,继承后的抽象类可以重写被继承的抽象类的抽象方法。

abstract class A
{
    abstract function test(string $s);
}
abstract class B extends A
{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;
}
Nach dem Login kopieren

扩展了参数类型

重写方法和接口实现的参数类型现在可以省略了。不过这仍然是符合LSP,因为现在这种参数类型是逆变的。

interface A
{
    public function Test(array $input);
}
class B implements A
{
    public function Test($input){} // type omitted for $input
}
Nach dem Login kopieren

允许分组命名空间的尾部逗号

命名空间可以在PHP 7中使用尾随逗号进行分组引入。

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};
Nach dem Login kopieren



Das obige ist der detaillierte Inhalt vonNeue Funktionen von PHP5.5 bis PHP7.2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage