Cet article présente principalement des informations sur les nouvelles fonctionnalités de PHP7. Nous avons compilé ici des informations détaillées et des codes d'implémentation simples pour vous aider à apprendre et à référencer les nouvelles fonctionnalités. Les amis intéressés peuvent se référer à
Apprentissage des nouvelles fonctionnalités de. PHP
Le projet que j'ai réalisé récemment utilisait php7, mais j'ai l'impression qu'il y a de nombreuses nouvelles fonctionnalités qui ne sont pas utilisées. Je veux juste résumer quelques nouvelles fonctionnalités qui peuvent être utilisées. L'environnement utilisé auparavant était php5.4, et toutes les fonctionnalités de php5.5 et php5.6 seront également résumées. Ici, je liste uniquement les fonctionnalités qui, à mon avis, peuvent être utilisées dans le projet. le manuel PHP.
Générateurs (PHP 5 >= 5.5.0, PHP 7)
Les générateurs sont pris en charge en ajoutant le mot-clé rendement. Les générateurs fournissent une méthode plus simple. implémente l'itérateur et n'a pas besoin d'implémenter l'interface Iterator.
<?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 "; }
La routine ci-dessus produira :
Nombres impairs à un chiffre : 1 3 5 7 9
Cliquez sur le générateur pour plus de détails
Ajout du mot-clé enfin (PHP 5 >= 5.5.0, PHP 7)
try-catch prend désormais en charge enfin
foreach maintenant Support for list() (PHP 5 >= 5.5.0, PHP 7)
La structure de contrôle foreach prend désormais en charge la séparation des tableaux imbriqués en variables distinctes via la construction list(). Par exemple :
<?php $array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { echo "A: $a; B: $b\n"; } ?>
La routine ci-dessus affichera :
A : 1 ; B : 2
A : 3
array_column (PHP 5 >= 5.5.0, PHP 7)
array_column — Renvoie une colonne spécifiée dans un tableau
Utiliser des expressions pour définir des constantes (PHP 5 >= 5.6.0, PHP 7)
Dans les versions précédentes de PHP, il fallait utiliser des valeurs statiques pour définir des constantes, déclarez les propriétés et spécifiez les Paramètres de la fonctionValeur par défaut. Vous pouvez désormais utiliser des expressions numériques, notamment des nombres, des chaînes littérales et d'autres constantes, pour définir des constantes, déclarer des propriétés et définir des valeurs par défaut pour les paramètres de fonction.
<?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; ?>
La routine ci-dessus affichera :
4
La valeur de TROIS est 3
Vous pouvez maintenant passer const Mot clé pour définir des constantes de type tableau.
<?php const ARR = ['a', 'b']; echo ARR[0]; ?>
La routine ci-dessus affichera :
a
Utilisez l'opérateur... pour définir une fonction de paramètre de longueur variable (PHP 5 > = 5.6.0, PHP 7)
Vous pouvez désormais utiliser l'opérateur... pour implémenter des fonctions de paramètres de longueur variable sans compter sur func_get_args().
<?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); ?>
La routine ci-dessus affichera :
$req : 1 ; $opt : 0 ; de paramètres : 0
$req : 1 ; $opt : 2 ; nombre de paramètres : 1
$req : 1 ; : 2; nombre de paramètres : 3
Utiliser... l'opérateur pour l'expansion des paramètres (PHP 5 >= 5.6.0, PHP 7)
lors de l'appel Quand à l'aide de fonctions, utilisez l'opérateur... pour développer des tableaux et des objets traversables en paramètres de fonction. Dans d'autres
, comme Ruby, cela s'appelle l'opérateur de concaténation.
La routine ci-dessus affichera :<?php function add($a, $b, $c) { return $a + $b + $c; } $operators = [2, 3]; echo add(1, ...$operators); ?>
6
use a été étendu pour prendre en charge l'importation de fonctions et de constantes externes dans la classe. Les structures correspondantes sont use function et 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(); } ?>
42
NameSpacef
Ajoutez debugInfo(), qui peut être utilisé pour contrôler les attributs et les valeurs à afficher lors de l'utilisation de var_dump() pour afficher des objets.
<?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)); ?>
object(C)#1 (1) { ["propSquared"]=> int(1764) }
La déclaration de type scalaire a Deux modes : mode obligatoire (par défaut) et mode strict. Les paramètres de type suivants sont désormais disponibles (en mode forcé ou strict) : string, int, float et bool. Ils étendent d'autres types introduits dans PHP5 : noms de classes, interfaces, tableaux et
<?php // Coercive mode function sumOfInts(int ...$ints) { return array_sum($ints); } var_dump(sumOfInts(2, '3', 4.1));
int(9)
Pour utiliser le mode strict, une directive de déclaration déclarer doit être placée en haut de le fichier. Cela signifie que les scalaires sont strictement déclarés configurables sur la base d'un fichier. Cette directive affecte non seulement la déclaration de type des paramètres, mais également la déclaration de valeur de retour de la fonction
Déclaration de type de valeur de retour (PHP 7)
PHP 7 ajoute la prise en charge de la déclaration de type de retour. Semblable à la déclaration de type de paramètre, la déclaration de type de retour spécifie le type de valeur de retour de la fonction. Les types disponibles sont les mêmes que ceux disponibles dans la déclaration des paramètres.
La routine ci-dessus affichera :
<?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]));
(
[0] => 6 [1] => 15
[ 2] => 24
)
opérateur de coalescence nul (PHP 7)
由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。 太空船操作符(组合比较符)(PHP 7) 太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。 通过 define() 定义常量数组 (PHP 7) Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const 定义。 匿名类 (PHP 7) 现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。 以上例程会输出: object(class@anonymous)#2 (0) { Closure::call() (PHP 7) Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。 以上例程会输出: 1 为unserialize()提供过滤 (PHP 7) 这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。 Group use declarations (PHP 7) 从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了。 Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!<?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
// 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
?>
<?php
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
echo ANIMALS[1]; // outputs "cat"
?>
<?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());
?>
}<?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<?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]);
<?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};
?>