Heim > Artikel > Backend-Entwicklung > Neue Funktionen von PHP5.5 bis PHP7.2
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 = 'The value of THREE is '.self::THREE; }
kann jetzt Konstanten vom Typ const
über das Schlüsselwort array
definieren.
<?php const ARR = ['a', 'b']; echo ARR[0];
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('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3); f(1, 2, 3, 4); ?>
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
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); ?>
Die obige Routine gibt Folgendes aus:
6
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(); } ?>
Die obige Routine gibt Folgendes aus:
42 Name\Space\f
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, '3', 4.1));
Die obige Routine gibt Folgendes aus:
int(9)
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); }
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['user'] and returns 'nobody' if it does not exist. $username = $_GET['user'] ?? 'nobody'; // This is equivalent to: $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; // Coalesces can be chained: this will return the first defined value out of $_GET['user'], $_POST['user'], and 'nobody'. $username = $_GET['user'] ?? $_POST['user'] ?? 'nobody'; ?>
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 <=> '1'; // 0 echo 1 <=> 2; // -1 echo 2 <=> 1; // 1 // 浮点数 echo '1.50' <=> 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 ?>
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('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 输出 "cat"
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, 'A'); // 中间层闭包 echo $getX(); // PHP 7+ 及更高版本的代码 $getX = function() {return $this->x;}; echo $getX->call(new A);
Die obige Routine gibt Folgendes aus:
1
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}; ?>
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 'elePHPant'; } var_dump(testReturn()); function testReturn(): ?string { return null; } var_dump(testReturn()); function test(?string $name) { var_dump($name); } test('elePHPant'); test(null); test();
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...
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);
Die obige Routine gibt Folgendes aus:
null int(2) int(1) Symmetric array destructuring
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, '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 }
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; }
<code><strong>iterable</strong>
iterierbarPseudoklasse
现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。
<?php function iterator(iterable $iter) : iterable { foreach ($iter as $val) { // } }
多异常捕获处理
一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。
<?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 }
四、从PHP 7.1.x 移植到 PHP 7.2.x
新的对象类型
这种新的对象类型, object, 引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。
<?php function test(object $obj) : object { return new SplQueue(); } test(new StdClass());
允许重写抽象方法(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; }
扩展了参数类型
重写方法和接口实现的参数类型现在可以省略了。不过这仍然是符合LSP,因为现在这种参数类型是逆变的。
interface A { public function Test(array $input); } class B implements A { public function Test($input){} // type omitted for $input }
允许分组命名空间的尾部逗号
命名空间可以在PHP 7中使用尾随逗号进行分组引入。
use Foo\Bar\{ Foo, Bar, Baz, };
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!