Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der neuen Funktionen in PHP7.1 und 7.2

Detaillierte Erläuterung der neuen Funktionen in PHP7.1 und 7.2

藏色散人
藏色散人nach vorne
2019-03-22 11:10:274303Durchsuche

Detaillierte Erläuterung der neuen Funktionen in PHP7.1 und 7.2

Ich habe Ihnen bereits detaillierte Erklärung der neuen Funktionen von php7.0 vorgestellt, heute werfen wir einen Blick auf die neuen Funktionen von PHP7.1 und PHP7.2 Funktion.

php7.1 neue Funktionen

1. Nullable-Typ

Parameter und Rückgabewerte Eine Typdeklaration kann als null markiert werden durch Hinzufügen eines Fragezeichens (?) vor dem Typnamen. Gibt an, dass der Typ eines Funktionsparameters oder Rückgabewerts entweder der angegebene Typ oder null ist.

Sehen Sie sich das Beispiel an:

function testReturn(?string $name)
{
    return $name;
}
var_dump(testReturn('yangyi'));
var_dump(testReturn(null));
var_dump(testReturn2());

Druckausgabe:

$ php php71.php
string(6) "yangyi"
NULL
PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14
Stack trace:
#0 php71.php(22): testReturn()
#1 {main}
  thrown in php71.php on line 14

Das Gleiche wie oben: Der Dritte hat einen schwerwiegenden Fehler gemeldet.

Sehen wir uns die Situation an, in der der Rückgabewert der Funktion nullbar ist:

function testReturn3() : ?string
{
    //return "abc";
    //return null;
}
var_dump(testReturn3());

Falls hinzugefügt? Sie können nichts zurückgeben. Es wird ein Fehler gemeldet.

2.void-Rückgabetyp

PHP7.0 hat die Funktion zur Angabe des Funktionsrückgabetyps hinzugefügt, aber der Rückgabetyp kann nicht als void angegeben werden. Diese Funktion von 7.1 ist gilt als Nachschub. Eine mit dem Rückgabetyp void definierte Funktion kann keinen Rückgabewert haben, auch wenn sie null zurückgibt:

function testReturn4() : void
{
    //1. 要么啥都不返还 ok
    //2. 要么只return; ok
    //return;
    //3. return null 也会报错
    //return null;
    //4. return 4 会报错
    //return 4;
}
Fatal error: A void function must not return a value in /php71.php on line 70

Außerdem kann void nur für Rückgabewerte und nicht für Parameter verwendet werden. Beispielsweise wird der folgende Fehler gemeldet:

function testReturn6(void $a) : void
{
}
var_dump(testReturn6());
PHP Fatal error:  void cannot be used as a parameter type in php71.php on line 73

Wenn eine Methode in der Klassenvererbung als void-Rückgabetyp deklariert ist und die Unterklasse ihn erbt und überschreibt, kann sie nur void zurückgeben, andernfalls wird ein Fehler ausgegeben ausgelöst werden:

<?php 
class Foo
{
    public function bar(): void {
    }
}
class Foobar extends Foo
{
    // 覆盖失败
    public function bar(): array { 
        // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void
    }
}

Sie müssen dies also tun, damit Sie keine Fehlermeldung erhalten:

class Foo
{
    public $a;
    public function bar(): void {
        $this->a = 2;
    }
}
class Foobar extends Foo
{
    // 覆盖成功
    public function bar(): void {
        $this->a = 3;
    }
}

3.list Die Abkürzung in eckigen Klammern ([]) und das Hinzufügen der Der angegebene Schlüssel

kann mit der Liste schnell durchlaufen werden, um die Werte im Array abzurufen. Die Abkürzung [] kann jetzt verwendet werden.

$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
}

Darüber hinaus kann diese aktualisierte Liste auch einen Schlüssel für das Index-Array angeben. Dieses Upgrade ist großartig und sehr praktisch.

$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
}

Bevor diese Funktion nicht verfügbar war, haben wir normalerweise while + every verwendet, um das Indexarray mit list zu durchlaufen:

$data = [
    ["id" => 1, "name" => &#39;Tom&#39;],
    ["id" => 2, "name" => &#39;Fred&#39;],
];
while (list($id, name) = each($data)) {
    echo "$key => $val\n";
}

Hinweis: Die Funktion „eached“ wurde in PHP 7.2 entfernt! Verwenden Sie diese Methode daher nicht zum Durchlaufen des Indexarrays

4. Festlegen des sichtbaren Bereichs von Klassenkonstanten

Vorher wurden die Konstanten in der Klasse als deklariert const, aber es gab keine Visible-Attribute. Jetzt werden die sichtbaren Attribute der Methode übertragen:

<?php 
class ConstDemo 
{
    // 常量默认为 public
    const PUBLIC_CONST = 0;
    // 可以自定义常量的可见范围
    public const PUBLIC_CONST_B = 2;
    protected const PROTECTED_CONST = 3;
    private const PRIVATE_CONST = 4;
    // 多个常量同时声明只能有一个属性
    private const FOO = 1, BAR = 2;
}

Die Verwendungsmethode ist dieselbe wie die Methode der Klasse. Ich werde nicht auf Details eingehen.

5. Unterstützen Sie den negativen String-Offset

Es gibt zwei Aktualisierungen: 1 dient dazu, den String direkt zu übernehmen, 2 bedeutet, dass der dritte Parameter der strpos-Funktion negative Zahlen unterstützt. Zeigt das Nehmen vom Schwanz an.

var_dump("abcdef"[-2]); // e
var_dump(strpos("aabbcc", "b", -3)); //3

Die String-Variable kann den Wert direkt annehmen, ohne den Variablennamen zu übergeben. Sie wurde in PHP5.5 hinzugefügt. Jetzt können Sie es vom Ende nehmen:

var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:e
var_dump("abcdef"[2]); // 从前面取第2个,从0开始:c
$string = &#39;bar&#39;;
echo $string[1], $string[-1]; // a r

6. Multi-Condition-Catch

In der vorherigen try...catch-Anweisung kann nur eine Bedingung festgelegt werden für jeden Fang Urteil:

try {
    // Some code...
} catch (ExceptionType1 $e) {
    // 处理 ExceptionType1
} catch (ExceptionType2 $e) {
    // 处理 ExceptionType2
} catch (Exception $e) {
    // ...
}

können nun gemeinsam verarbeitet werden. Verwenden Sie zum Trennen „|“.

try {
    // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
    // 对于 ExceptionType1 和 ExceptionType2 的处理
} catch (Exception $e) {
    // ...
}

php7.2

php 7.2 ist größtenteils ein Update auf unterster Ebene zur Verbesserung der Leistung. Es gibt nicht viele Aktualisierungen auf der Ebene der allgemeinen Syntax, daher werden wir sie hier überspringen.

Verwandte Empfehlungen: „PHP-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der neuen Funktionen in PHP7.1 und 7.2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:zybuluo.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen