Maison >développement back-end >tutoriel php >Introduction détaillée aux nouvelles fonctionnalités de PHP7

Introduction détaillée aux nouvelles fonctionnalités de PHP7

怪我咯
怪我咯original
2017-07-05 10:28:341222parcourir

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 &#39;Single digit odd numbers: &#39;;

/* 注意保存在内存中的数组绝不会被创建或返回 */
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 = &#39;The value of THREE is &#39;.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 = [&#39;a&#39;, &#39;b&#39;];

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(&#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);
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

langages de programmation

, 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


utiliser la fonction et utiliser const (PHP 5 >= 5.6.0, PHP 7) L'opérateur


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.

La routine ci-dessus affichera :
<?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

debugInfo() (PHP 5 >= 5.6.0, PHP 7)


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.

La routine ci-dessus affichera :
<?php
class C {
 private $prop;

 public function construct($val) {
  $this->prop = $val;
 }

 public function debugInfo() {
  return [
   &#39;propSquared&#39; => $this->prop ** 2,
  ];
 }
}

var_dump(new C(42));
?>

object(C)#1 (1) {
 ["propSquared"]=>
 int(1764)
}
Déclaration de type scalaire (PHP 7)


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

types de rappel

.

La routine ci-dessus affichera :
<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
 return array_sum($ints);
}

var_dump(sumOfInts(2, &#39;3&#39;, 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

(voir déclaration de type de valeur de retour, fonctions PHP intégrées et fonctions PHP chargées dans les extensions)

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]));
Array

(

[0] => 6

[1] => 15
[ 2] => 24
)



opérateur de coalescence nul (PHP 7)

由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

<?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;;
?>

太空船操作符(组合比较符)(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(&#39;ANIMALS&#39;, [
 &#39;dog&#39;,
 &#39;cat&#39;,
 &#39;bird&#39;
]);

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, &#39;A&#39;); // 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};
?>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn