Nouvelles fonctionnalités des versions PHP 7.x
Avant-propos
Le mois dernier, mon collègue m'a vu écrire
$a = $a ?? '';
et m'a demandé quelle était cette façon d'écrire, y a-t-il une autre façon de l'écrire ? J'ai dit qu'il s'agissait d'une méthode d'écriture qui n'est disponible qu'en PHP7 et supérieur. Vous ne savez pas ? Il a dit qu'il ne savait pas.
J'ai réfléchi un moment et j'ai décidé de commencer à écrire ce blog.
PHP7 devrait être un PHP moderne en plus des bases. Parce qu'en PHP7, les définitions de types fortes et certaines méthodes d'écriture grammaticale, telles que les opérateurs de comparaison combinés, définissent() peuvent définir des tableaux et d'autres fonctionnalités. L'introduction formelle commence ci-dessous, en commençant par PHP7.0. De nouvelles versions seront ajoutées à l'avenir, et elles seront ajoutées les unes après les autres.
D'accord, commençons
Recommandé (gratuit) : PHP7
PHP 7.0
Déclaration de type scalaire
Qu'est-ce qu'un type scalaire ?
Quatre types scalaires :
booléen (Boolean)
entier (entier)
float (virgule flottante, également appelé double)
chaîne (chaîne de caractères)
Deux types composites :
tableau (tableau)
objet (objet)
La ressource est une variable spéciale qui contient une référence à une ressource externe. Les ressources sont créées et utilisées via des fonctions spécialisées. Les variables de type de ressource sont des poignées spéciales pour l'ouverture de fichiers, les connexions à une base de données, les zones de canevas graphique, etc.
Pour faire plus simple, un type scalaire est un type de données qui définit des variables.
En php5, il y a des noms de classes, des interfaces, des tableaux et des fonctions de rappel. En PHP, des chaînes, des entiers, des flottants et des booléens ont été ajoutés. Prenons un exemple ci-dessous. Voir l'exemple de everything
function typeInt(int $a){ echo $a;}typeInt('sad');// 运行,他讲会报错 Fatal error: Uncaught TypeError: Argument 1 passed to type() must be of the type integer, string given
Ici, nous définissons que $a doit être de type int Si une chaîne est passée dans la fonction type, une erreur sera signalée. Modifions le code ci-dessus et c'est vrai
function typeString(string $a){ echo $a;}typeString('sad'); //sad
Déclaration du type de valeur de retour
La valeur de retour de la méthode de la fonction peut être définie. Par exemple, une certaine fonction doit retourner. Tapez Int, il renverra certainement int. Si vous renvoyez une chaîne, une erreur sera signalée. Comme suit
<?phpfunction returnArray(): array{ return [1, 2, 3, 4];}print_r(returnArray());/*Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) */
Et si nous définissons un tableau et renvoyons une chaîne ou d'autres types ?
Ensuite, il signalera une erreur telle que
function returnErrorArray(): array { return '1456546'; } print_r(returnErrorArray()); /* Array Fatal error: Uncaught TypeError: Return value of returnArray() must be of the type array, string returned in */
opérateur de coalescence nul
En raison du fait qu'il existe un grand nombre de trois utilisations simultanées au quotidien Dans le cas des métaexpressions et d'isset(), on ajoute le sucre syntaxique de l'opérateur de coalescence nul (??). Si la variable existe et n'est pas NULL, elle renvoie sa propre valeur, sinon elle renvoie son deuxième opérande.
<?php $username = $_GET['user'] ?? 'nobody'; //这两个是等效的 当不存在user 则返回?? 后面的参数 $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; ?>
Opérateur de vaisseau spatial
// 整数echo 1 <=> 1; // 0 当左边等于右边的时候,返回0echo 1 <=> 2; // -1 当左边小于右边,返回-1echo 2 <=> 1; // 1 当左边大于右边,返回1// 浮点数echo 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1 // 字符串echo "a" <=> "a"; // 0echo "a" <=> "b"; // -1echo "b" <=> "a"; // 1
définir définit un tableau
Dans les versions antérieures à PHP7, définir ne peut pas définir de tableaux C'est maintenant le cas possible, par exemple,
define('ANIMALS', [ 'dog', 'cat', 'bird' ]); echo ANIMALS[1]; // 输出 "cat"
utiliser la méthode pour importer par lots
// 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};
###Syntaxe de traduction de point de code Unicode
echo "\u{aa}"; //ªecho "\u{0000aa}"; //ª echo "\u{9999}"; //香
classe anonyme
<?phpinterface 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; }});
PHP 7.1
Types nullables
Les types de paramètres et les valeurs de retour peuvent désormais être transmis dans le type Ajoutez un point d'interrogation avant pour lui permettre d'être vide. Lorsque cette fonctionnalité est activée, les paramètres transmis ou le résultat renvoyé par la fonction sont soit du type donné, soit null .
<?phpfunction testReturn(): ?string{ return 'elePHPant';}var_dump(testReturn()); //string(10) "elePHPant"function testReturn(): ?string{ return null;}var_dump(testReturn()); //NULLfunction test(?string $name){ var_dump($name);}test('elePHPant'); //string(10) "elePHPant"test(null); //NULLtest(); //Uncaught Error: Too few arguments to function test(), 0 passed in...
void
ajoute un type qui renvoie void, tel que
<?phpfunction 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);
Traitement de capture d'exceptions multiples
Cette fonction est assez couramment utilisée dans le développement quotidien
<?php try { // some code } catch (FirstException | SecondException $e) { //用 | 来捕获FirstException异常,或者SecondException 异常 }
PHP 7.2
PHP7.2 est la moins nouvelle fonctionnalité de la série PHP7
### Autoriser les virgules de fin dans les espaces de noms groupés
tels que
<?phpuse Foo\Bar\{ Foo, Bar, Baz,};
Autoriser le remplacement des méthodes abstraites
<?phpabstract 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;}
Nouveaux types d'objets
<?phpfunction test(object $obj) : object //这里 可以输入对象{ return new SplQueue();}test(new StdClass());
PHP 7.3
PHP7.3 Il n'y a pas de gros changements au niveau de la syntaxe.
PHP 7.4
Les attributs de classe prennent en charge la déclaration de type
Félicitations pour que PHP ait franchi une nouvelle étape vers le typage fort
<?phpclass User { public int $id; public string $name;}?>
Fonctions fléchées
Les fonctions fléchées fournissent une syntaxe abrégée pour définir des fonctions à l'aide d'une liaison de portée implicite par valeur. C'est similaire à la fonction flèche de JS, mais avec un fn. Une vague de plaintes
<?php$factor = 10;$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);// $nums = array(10, 20, 30, 40);?>
Méthode de support de l'opérateur de fusion nulle
<?php$array['key'] ??= computeDefault();// 类似与这个if (!isset($array['key'])) { $array['key'] = computeDefault();}?>
Je suis un agriculteur, un codeur qui écrit et colle habituellement du code.
Si vous l'aimez, veuillez cliquer sur "Suivre".
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!