In diesem Artikel werden hauptsächlich Informationen zu den neuen Funktionen von PHP7 vorgestellt. Hier haben wir detaillierte Informationen und einfache Implementierungscodes zusammengestellt, um Ihnen das Erlernen und Referenzieren der neuen Funktionen zu erleichtern PHP
Das Projekt, das ich kürzlich durchgeführt habe, verwendete PHP7, aber ich habe das Gefühl, dass es viele neue Funktionen gibt, die nicht verwendet werden. Ich möchte nur einige neue Funktionen zusammenfassen, die verwendet werden können. Die zuvor verwendete Umgebung war PHP5.4. Hier werden nur die Funktionen zusammengefasst, die meiner Meinung nach im Projekt verwendet werden können PHP-Handbuch.
Generatoren (PHP 5 >= 5.5.0, PHP 7)
Generatoren werden durch Hinzufügen des Schlüsselworts yield unterstützt. Generatoren bieten eine einfachere Methode implementiert den Iterator und muss die Iterator-Schnittstelle nicht implementieren.
<?php function xrange($start, $limit, $step = 1) { for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } echo 'Single digit odd numbers: '; /* 注意保存在内存中的数组绝不会被创建或返回 */ foreach (xrange(1, 9, 2) as $number) { echo "$number "; }
Einstellige ungerade Zahlen: 1 3 5 7 9
Klicken Sie auf den Generator für Details
Endgültiges Schlüsselwort hinzugefügt (PHP 5 >= 5.5.0, PHP 7)
Try-Catch unterstützt jetzt endlich
Die foreach-Kontrollstruktur unterstützt jetzt die Aufteilung verschachtelter Arrays in separate Variablen über das list()-Konstrukt. Zum Beispiel:
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { echo "A: $a; B: $b\n"; } ?>
A: 1; B: 2
A: 3; B: 4
array_column (PHP 5 >= 5.5.0, PHP 7)
array_column – Gibt eine angegebene Spalte in einem Array zurück
Verwenden Sie Ausdrücke, um Konstanten zu definieren (PHP 5 >= 5.6.0, PHP 7)
In früheren PHP-Versionen mussten statische Werte verwendet werden, um Konstanten zu definieren, Eigenschaften deklarieren und
Standardwert angeben. 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.
Die obige Routine gibt Folgendes aus:<?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; public function f($a = ONE + self::THREE) { return $a; } } echo (new C)->f()."\n"; echo C::SENTENCE; ?>
4
Der Wert von DREI ist 3
Jetzt können Sie bestehen const Schlüsselwort zum Definieren von Konstanten vom Typ Array.
<?php const ARR = ['a', 'b']; echo ARR[0]; ?>
a
Sie können jetzt den ...-Operator verwenden, um Parameterfunktionen variabler Länge zu implementieren, ohne sich auf func_get_args() 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); f(1, 2, 3, 4, 5); ?>
$req: 1; $opt: 0; Anzahl der Parameter: 0
$req: 1; $opt: 2; der Parameter: 0$req: 1; $opt: 2; $req: 1; $opt: 2; $req: 1; : 2; Anzahl der Parameter: 3
Verwenden Sie... den Operator für die Parametererweiterung (PHP 5 >= 5.6.0, PHP 7)
Programmiersprachen
wie Ruby wird dies als Verkettungsoperator bezeichnet.
Die obige Routine gibt Folgendes aus:
6<?php function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators); ?>
use function und use const (PHP 5 >= 5.6.0, PHP 7) Der
use-Operator wurde erweitert, um den Import externer Funktionen und Konstanten in die Klasse zu unterstützen. 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(); } ?>
DebugInfo() hinzufügen, mit dem die auszugebenden Attribute und Werte gesteuert werden können, wenn var_dump() zum Ausgeben von Objekten verwendet wird.
<?php class C { private $prop; public function construct($val) { $this->prop = $val; } public function debugInfo() { return [ 'propSquared' => $this->prop ** 2, ]; } } var_dump(new C(42)); ?>
Skalare Typdeklaration (PHP 7)
object(C)#1 (1) { ["propSquared"]=> int(1764) }
Skalare Typdeklaration hat Zwei Modi: obligatorischer (Standard) und strenger Modus. Die folgenden Typparameter sind jetzt verfügbar (entweder im erzwungenen oder strikten Modus): string, int, float und bool. Sie erweitern andere in PHP5 eingeführte Typen: Klassennamen, Schnittstellen, Arrays und Callback-Typen
.
Die obige Routine gibt Folgendes aus:
int(9)<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));
(siehe Rückgabewerttypdeklaration, integrierte PHP-Funktionen und in Erweiterungen geladene PHP-Funktionen)
Rückgabewerttypdeklaration (PHP 7)
PHP 7 fügt Unterstützung für die Rückgabetypdeklaration 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.
Die obige Routine gibt Folgendes aus:
Array
(<?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] => 15
[ 2] => 24)
Null-Koaleszenzoperator (PHP 7)
由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为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'; // 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'; ?>
太空船操作符(组合比较符)(PHP 7)
太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 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() 定义常量数组 (PHP 7)
Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const 定义。
<?php define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // outputs "cat" ?>
匿名类 (PHP 7)
现在支持通过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()); ?>
以上例程会输出:
object(class@anonymous)#2 (0) {
}
Closure::call() (PHP 7)
Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。
<?php class A {private $x = 1;} // Pre PHP 7 code $getXCB = function() {return $this->x;}; $getX = $getXCB->bindTo(new A, 'A'); // intermediate closure echo $getX(); // PHP 7+ code $getX = function() {return $this->x;}; echo $getX->call(new A);
以上例程会输出:
1
1
为unserialize()提供过滤 (PHP 7)
这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。
<?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]);
Group use declarations (PHP 7)
从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了。
<?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}; ?>
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die neuen Funktionen von PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!