PHP 7 - Guide rapide

Qu'est-ce que PHP 7?

PHP 7 est une version majeure du langage de programmation PHP et est présenté comme une révolution dans la façon dont les applications Web peuvent être développées et fournies pour les mobiles aux entreprises et au cloud. Cette version est considérée comme le changement le plus important pour PHP après la sortie de PHP 5 en 2004.

Nouvelles fonctionnalités

Il y a des dizaines de fonctionnalités ajoutées à PHP 7, les plus importantes sont mentionnées ci-dessous -

  • Improved performance - La fusion du code PHPNG dans PHP7 est deux fois plus rapide que PHP 5.

  • Lower Memory Consumption - PHP 7 optimisé utilise moins de ressources.

  • Scalar type declarations - Les types de paramètres et de retour peuvent maintenant être appliqués.

  • Consistent 64-bit support - Prise en charge cohérente des machines à architecture 64 bits.

  • Improved Exception hierarchy - La hiérarchie des exceptions est améliorée.

  • Many fatal errors converted to Exceptions - La plage d'exceptions est augmentée, couvrant de nombreuses erreurs fatales converties en exceptions.

  • Secure random number generator - Ajout d'une nouvelle API de générateur de nombres aléatoires sécurisée.

  • Deprecated SAPIs and extensions removed - Divers SAPI et extensions anciens et non pris en charge sont supprimés de la dernière version.

  • The null coalescing operator (??) - Nouvel opérateur de fusion nul ajouté.

  • Return and Scalar Type Declarations - Prise en charge du type de retour et du type de paramètre ajouté.

  • Anonymous Classes - Prise en charge des anonymes ajoutés.

  • Zero cost asserts - Prise en charge de l'assertion à coût nul ajouté.

PHP 7 utilise le nouveau Zend Engine 3.0 pour améliorer les performances des applications presque deux fois et une consommation de mémoire 50% supérieure à PHP 5.6. Il permet de servir plus d'utilisateurs simultanés sans nécessiter de matériel supplémentaire. PHP 7 est conçu et remanié en tenant compte des charges de travail d'aujourd'hui.

Selon l' équipe Zend , les illustrations suivantes montrent la comparaison des performances de PHP 7 par rapport à PHP 5.6 et HHVM 3.7 sur des applications PHP populaires.

Magento 1.9

PHP 7 se montre plus de deux fois plus rapide que PHP 5.6 lors de l'exécution de transactions Magento.

Drupal 7

PHP 7 se montre plus de deux fois plus rapide que PHP 5.6 lors de l'exécution de transactions Drupal.

Wordpress 3.6

PHP 7 se révèle plus de deux fois plus rapide que PHP 5.6 lors de l'exécution de transactions Wordpress.

Comparaison des langages dynamiques

Essayez-le Option en ligne

Nous avons mis en place l'environnement de programmation PHP en ligne, afin que vous puissiez compiler et exécuter tous les exemples disponibles en ligne. Il vous donne confiance dans ce que vous lisez et vous permet de vérifier les programmes avec différentes options. N'hésitez pas à modifier n'importe quel exemple et à l'exécuter en ligne.

Essayez l'exemple suivant en utilisant notre compilateur en ligne disponible sur

<html>
   <head>
      <title>Online PHP Script Execution</title>
   </head>
   <body>
      <?php
         echo "<h1>Hello, PHP!</h1>";
      ?>   
   </body>
</html>

Pour la plupart des exemples donnés dans ce tutoriel, vous trouverez un Try itoption dans nos sections de code de site Web dans le coin supérieur droit qui vous mènera au compilateur en ligne. Alors utilisez simplement et profitez de votre apprentissage.

Afin de développer et d'exécuter des pages Web PHP, trois composants vitaux doivent être installés sur votre système informatique.

  • Web Server- PHP fonctionne avec pratiquement tous les logiciels de serveur Web, y compris Internet Information Server (IIS) de Microsoft, mais le plus souvent utilisé est Apache Server. Téléchargez Apache gratuitement ici -http://httpd.apache.org/download.cgi

  • Database- PHP PHP fonctionne avec pratiquement tous les logiciels de base de données, y compris Oracle et Sybase, mais le plus couramment utilisé est la base de données MySQL. Téléchargez MySQL gratuitement ici -http://www.mysql.com/downloads/

  • PHP Parser- Afin de traiter les instructions de script PHP, un analyseur doit être installé pour générer une sortie HTML qui peut être envoyée au navigateur Web. Ce tutoriel vous explique comment installer l'analyseur PHP sur votre ordinateur.

Installation de l'analyseur PHP

Avant de continuer, il est important de vous assurer que votre ordinateur est correctement configuré pour développer vos programmes Web en utilisant PHP. Stockez le fichier php suivant dans le dossier htdocs d'Apache.

phpinfo.php

<?php
   phpinfo();
?>

Tapez l'adresse suivante dans la zone d'adresse de votre navigateur.

http://127.0.0.1/phpinfo.php

Si cela affiche une page affichant les informations relatives à votre installation PHP, cela signifie que PHP et le serveur Web sont correctement installés. Sinon, vous devez suivre la procédure indiquée pour installer PHP sur votre ordinateur.

Cette section vous guidera pour installer et configurer PHP sur les quatre plates-formes suivantes -

Configuration Apache

Si vous utilisez Apache comme serveur Web, cette section vous guidera pour modifier les fichiers de configuration Apache.

Vérifiez ici - Configuration PHP dans Apache Server

Configuration du fichier PHP.INI

Le fichier de configuration PHP, php.ini, est le moyen final et immédiat d'affecter les fonctionnalités de PHP.

Vérifiez ici - Configuration du fichier PHP.INI

Configuration de Windows IIS

Pour configurer IIS sur votre ordinateur Windows, vous pouvez consulter votre manuel de référence IIS fourni avec IIS.

En PHP 7, une nouvelle fonctionnalité, les déclarations de type Scalar, a été introduite. La déclaration de type scalaire a deux options -

  • coercive - coercitif est le mode par défaut et n'a pas besoin d'être spécifié.

  • strict - Le mode strict doit être explicitement indiqué.

Les types suivants de paramètres de fonction peuvent être appliqués en utilisant les modes ci-dessus -

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

Exemple - Mode coercitif

<?php
   // Coercive mode
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1));
?>

Il produit la sortie de navigateur suivante -

9

Exemple - Mode strict

<?php
   // Strict mode
   declare(strict_types=1);
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1));
?>

Il produit la sortie de navigateur suivante -

Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...

En PHP 7, une nouvelle fonctionnalité, Return type declarationsa été introduit. La déclaration de type de retour spécifie le type de valeur qu'une fonction doit renvoyer. Les types suivants pour les types de retour peuvent être déclarés.

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

Exemple - Type de retour valide

<?php
   declare(strict_types = 1);
   function returnIntValue(int $value): int {
      return $value;
   }
   print(returnIntValue(5));
?>

Il produit la sortie de navigateur suivante -

5

Exemple - Type de retour non valide

<?php
   declare(strict_types = 1);
   function returnIntValue(int $value): int {
      return $value + 1.0;
   }
   print(returnIntValue(5));
?>

Il produit la sortie de navigateur suivante -

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

En PHP 7, une nouvelle fonctionnalité, null coalescing operator (??)a été introduit. Il est utilisé pour remplacer leternaryopération en conjonction avec la fonction isset (). leNullL'opérateur de fusion retourne son premier opérande s'il existe et n'est pas NULL; sinon, il renvoie son deuxième opérande.

Exemple

<?php
   // fetch the value of $_GET['user'] and returns 'not passed'
   // if username is not passed
   $username = $_GET['username'] ?? 'not passed';
   print($username);
   print("<br/>");

   // Equivalent code using ternary operator
   $username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
   print($username);
   print("<br/>");
   // Chaining ?? operation
   $username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
   print($username);
?>

Il produit la sortie de navigateur suivante -

not passed
not passed
not passed

En PHP 7, une nouvelle fonctionnalité, l'opérateur de vaisseau spatial a été introduite. Il est utilisé pour comparer deux expressions. Il renvoie -1, 0 ou 1 lorsque la première expression est respectivement inférieure, égale ou supérieure à la seconde expression.

Exemple

<?php
   //integer comparison
   print( 1 <=> 1);print("<br/>");
   print( 1 <=> 2);print("<br/>");
   print( 2 <=> 1);print("<br/>");
   print("<br/>");
   
   //float comparison
   print( 1.5 <=> 1.5);print("<br/>");
   print( 1.5 <=> 2.5);print("<br/>");
   print( 2.5 <=> 1.5);print("<br/>");
   print("<br/>");
   
   //string comparison
   print( "a" <=> "a");print("<br/>");
   print( "a" <=> "b");print("<br/>");
   print( "b" <=> "a");print("<br/>");
?>

Il produit la sortie de navigateur suivante -

0
-1
1

0
-1
1

0
-1
1

Les constantes de tableau peuvent maintenant être définies à l'aide de define()fonction. En PHP 5.6, ils ne pouvaient être définis qu'en utilisantconst mot-clé.

Exemple

<?php
   //define a array using define function
   define('animals', [
      'dog',
      'cat',
      'bird'
   ]);
   print(animals[1]);
?>

Il produit la sortie de navigateur suivante -

cat

Les classes anonymes peuvent maintenant être définies en utilisant une nouvelle classe. Une classe anonyme peut être utilisée à la place d'une définition de classe complète.

Exemple

<?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) {
         print($msg);
      }
   });

   $app->getLogger()->log("My first Log Message");
?>

Il produit la sortie de navigateur suivante -

My first Log Message

Closure::call()est ajoutée en tant que moyen abrégé de lier temporairement une portée d'objet à une fermeture et de l'appeler. Il est beaucoup plus rapide en termes de performances quebindTo de PHP 5.6.

Exemple - Pré PHP 7

<?php
   class A {
      private $x = 1;
   }

   // Define a closure Pre PHP 7 code
   $getValue = function() {
      return $this->x;
   };

   // Bind a clousure
   $value = $getValue->bindTo(new A, 'A'); 

   print($value());
?>

Il produit la sortie de navigateur suivante -

1

Exemple - PHP 7+

<?php
   class A {
      private $x = 1;
   }

   // PHP 7+ code, Define
   $value = function() {
      return $this->x;
   };

   print($value->call(new A));
?>

Il produit la sortie de navigateur suivante -

1

PHP 7 introduit Filtered unserialize()pour offrir une meilleure sécurité lors de la désérialisation d'objets sur des données non approuvées. Il empêche les injections de code possibles et permet au développeur de mettre en liste blanche les classes qui peuvent être désérialisées.

Exemple

<?php
   class MyClass1 { 
      public $obj1prop;   
   }
   class MyClass2 {
      public $obj2prop;
   }

   $obj1 = new MyClass1();
   $obj1->obj1prop = 1;
   $obj2 = new MyClass2();
   $obj2->obj2prop = 2;

   $serializedObj1 = serialize($obj1);
   $serializedObj2 = serialize($obj2);

   // default behaviour that accepts all classes
   // second argument can be ommited.
   // if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
   $data = unserialize($serializedObj1 , ["allowed_classes" => true]);

   // converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2
   $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);

   print($data->obj1prop);
   print("<br/>");
   print($data2->obj2prop);
?>

Il produit la sortie de navigateur suivante -

1
2

En PHP7, un nouveau IntlCharLa classe est ajoutée, qui cherche à exposer des fonctionnalités ICU supplémentaires. Cette classe définit un certain nombre de méthodes et de constantes statiques, qui peuvent être utilisées pour manipuler des caractères unicode. Vous devez avoirIntl l'extension installée avant d'utiliser cette classe.

Exemple

<?php
   printf('%x', IntlChar::CODEPOINT_MAX);
   print (IntlChar::charName('@'));
   print(IntlChar::ispunct('!'));
?>

Il produit la sortie de navigateur suivante -

10ffff
COMMERCIAL AT
true

Dans PHP 7, les deux nouvelles fonctions suivantes sont introduites pour générer des entiers et des chaînes cryptographiquement sécurisés de manière multiplateforme.

  • random_bytes() - Génère des octets pseudo-aléatoires cryptographiquement sécurisés.

  • random_int() - Génère des entiers pseudo-aléatoires sécurisés par cryptographie.

random_bytes ()

random_bytes () génère une chaîne de longueur arbitraire d'octets aléatoires cryptographiques adaptés à une utilisation cryptographique, par exemple lors de la génération de sels, de clés ou de vecteurs d'initialisation.

Syntaxe

string random_bytes ( int $length )

Paramètres

  • length - La longueur de la chaîne aléatoire qui doit être renvoyée en octets.

Valeurs de retour

  • Renvoie une chaîne contenant le nombre demandé d'octets aléatoires sécurisés par cryptographie.

Erreurs / exceptions

  • Si une source appropriée d'aléatoire ne peut être trouvée, une exception sera lancée.

  • Si des paramètres invalides sont donnés, un TypeError sera jeté.

  • Si une longueur non valide d'octets est donnée, une erreur sera renvoyée.

Exemple

<?php
   $bytes = random_bytes(5);
   print(bin2hex($bytes));
?>

Il produit la sortie de navigateur suivante -

54cc305593

random_int ()

random_int() génère des entiers aléatoires cryptographiques qui conviennent à une utilisation lorsque des résultats non biaisés sont essentiels.

Syntaxe

int random_int ( int $min , int $max )

Paramètres

  • min - La valeur la plus basse à renvoyer, qui doit être PHP_INT_MIN ou plus.

  • max - La valeur la plus élevée à renvoyer, qui doit être inférieure ou égale à PHP_INT_MAX.

Valeurs de retour

  • Renvoie un entier aléatoire sécurisé cryptographiquement compris entre min et max, inclus.

Erreurs / exceptions

  • Si une source appropriée d'aléatoire ne peut être trouvée, un Exception sera jeté.

  • Si des paramètres invalides sont donnés, un TypeError sera jeté.

  • Si max est inférieur à min, un Error sera jeté.

Exemple

<?php
   print(random_int(100, 999));
   print(" ");
   print(random_int(-1000, 0));
?>

Il produit la sortie de navigateur suivante -

614
-882

Expectationssont une amélioration rétrocompatible de l'ancienne fonction assert (). L'attente permet des assertions à coût nul dans le code de production et offre la possibilité de lever des exceptions personnalisées lorsque l'assertion échoue. assert () est maintenant une construction de langage, où le premier paramètre est une expression par rapport à une chaîne ou un booléen à tester.

Directives de configuration pour assert ()

Directif Valeur par défaut Valeurs possibles
zend.assertions 1

1 - générer et exécuter du code (mode développement)

0 - générer du code mais en contourner au moment de l'exécution

-1 - ne pas générer de code (mode production)

assert.exception 0

1 - throw, lorsque l'assertion échoue, soit en lançant l'objet fourni comme exception, soit en lançant un nouveau AssertionError objet si l'exception n'a pas été fournie.

0 - utiliser ou générer un Throwable comme décrit ci-dessus, mais ne génère qu'un avertissement basé sur cet objet plutôt que de le lancer (compatible avec le comportement de PHP 5)

Paramètres

  • assertion- L'affirmation. En PHP 5, il doit s'agir d'une chaîne à évaluer ou d'un booléen à tester. En PHP 7, il peut également s'agir de toute expression qui renvoie une valeur, qui sera exécutée et le résultat est utilisé pour indiquer si l'assertion a réussi ou échoué.

  • description - Une description facultative qui sera incluse dans le message d'échec, si l'assertion échoue.

  • exception - En PHP 7, le deuxième paramètre peut être un Throwable objet au lieu d'une chaîne descriptive, auquel cas c'est l'objet qui sera jeté, si l'assertion échoue et si assert.exception la directive de configuration est activée.

Valeurs de retour

FALSE si l'assertion est fausse, TRUE autrement.

Exemple

<?php
   ini_set('assert.exception', 1);

   class CustomError extends AssertionError {}

   assert(false, new CustomError('Custom Error Message!'));
?>

Il produit la sortie de navigateur suivante -

Fatal error: Uncaught CustomError: Custom Error Message! in...

À partir de PHP7, une seule instruction d'utilisation peut être utilisée pour importer des classes, des fonctions et des constantes à partir du même espace de noms au lieu de plusieurs instructions d'utilisation.

Exemple

<?php
   // Before PHP 7
   use com\tutorialspoint\ClassA;
   use com\tutorialspoint\ClassB;
   use com\tutorialspoint\ClassC as C;

   use function com\tutorialspoint\fn_a;
   use function com\tutorialspoint\fn_b;
   use function com\tutorialspoint\fn_c;

   use const com\tutorialspoint\ConstA;
   use const com\tutorialspoint\ConstB;
   use const com\tutorialspoint\ConstC;

   // PHP 7+ code
   use com\tutorialspoint\{ClassA, ClassB, ClassC as C};
   use function com\tutorialspoint\{fn_a, fn_b, fn_c};
   use const com\tutorialspoint\{ConstA, ConstB, ConstC};

?>

À partir de PHP 7, la gestion des erreurs et les rapports ont été modifiés. Au lieu de signaler les erreurs via le mécanisme de rapport d'erreur traditionnel utilisé par PHP 5, la plupart des erreurs sont désormais gérées en lançant des exceptions d'erreur. Semblables aux exceptions, ces exceptions d'erreur remontent jusqu'à ce qu'elles atteignent le premier bloc catch correspondant. S'il n'y a pas de blocs correspondants, alors un gestionnaire d'exceptions par défaut installé avecset_exception_handler()sera appelé. S'il n'y a pas de gestionnaire d'exceptions par défaut, l'exception sera convertie en erreur fatale et sera traitée comme une erreur traditionnelle.

Comme la hiérarchie des erreurs n'est pas étendue depuis Exception, le code qui utilise des blocs catch (Exception $ e) {...} pour gérer les exceptions non interceptées dans PHP 5 ne gérera pas de telles erreurs. Un bloc catch (Error $ e) {...} ou unset_exception_handler() handler est requis pour gérer les erreurs fatales.

Exemple

<?php
   class MathOperations {
      protected $n = 10;

      // Try to get the Division by Zero error object and display as Exception
      public function doOperation(): string {
         try {
            $value = $this->n % 0;
            return $value;
         } catch (DivisionByZeroError $e) {
            return $e->getMessage();
         }
      }
   }

   $mathOperationsObj = new MathOperations();
   print($mathOperationsObj->doOperation());
?>

Il produit la sortie de navigateur suivante -

Modulo by zero

PHP 7 introduit une nouvelle fonction intdiv(), qui effectue une division entière de ses opérandes et renvoie la division comme int.

Exemple

<?php
   $value = intdiv(10,3);
   var_dump($value);
   print(" ");
   print($value);
?>

Il produit la sortie de navigateur suivante -

int(3) 
3

À partir de PHP7 +, session_start() La fonction accepte un tableau d'options pour remplacer les directives de configuration de session définies dans php.ini. Ces options prennent en chargesession.lazy_write, qui est activé par défaut et oblige PHP à écraser tout fichier de session si les données de session ont changé.

Une autre option ajoutée est read_and_close, ce qui indique que les données de session doivent être lues et que la session doit être immédiatement fermée sans modification. Par exemple, Setsession.cache_limiter en privé et définissez l'indicateur pour fermer la session immédiatement après l'avoir lue, à l'aide de l'extrait de code suivant.

<?php
   session_start([
      'cache_limiter' => 'private',
      'read_and_close' => true,
   ]);
?>

Les fonctionnalités suivantes sont obsolètes et peuvent être supprimées des futures versions de PHP.

Constructeurs de style PHP 4

Les constructeurs de style PHP 4 sont des méthodes ayant le même nom que la classe dans laquelle elles sont définies, sont désormais obsolètes et seront supprimées à l'avenir. PHP 7 émettra E_DEPRECATED si un constructeur PHP 4 est le seul constructeur défini dans une classe. Les classes implémentant une méthode __construct () ne sont pas affectées.

Exemple

<?php
   class A {
      function A() {
         print('Style Constructor');
      }
   }
?>

Il produit la sortie de navigateur suivante -

Deprecated: Methods with the same name as their class will not be constructors 
in a future version of PHP; A has a deprecated constructor in...

Appels statiques à des méthodes non statiques

Les appels statiques à des méthodes non statiques sont obsolètes et peuvent être supprimés à l'avenir.

Exemple

<?php
   class A {
      function b() {
         print('Non-static call');
      }
   }
   A::b();
?>

Il produit la sortie de navigateur suivante -

Deprecated: Non-static method A::b() should not be called statically in...
Non-static call

option sel password_hash ()

L'option sel pour le password_hash()La fonction a été déconseillée afin que les développeurs ne génèrent pas leurs propres sels (généralement non sécurisés). La fonction elle-même génère un sel cryptographiquement sécurisé, quand aucun sel n'est fourni par le développeur - ainsi la génération de sel personnalisée n'est plus nécessaire.

Option de contexte SSL capture_session_meta

le capture_session_metaL'option de contexte SSL est obsolète. Les métadonnées SSL sont désormais utilisées via lestream_get_meta_data() fonction.

Les extensions suivantes ont été supprimées à partir de PHP 7 -

  • ereg
  • mssql
  • mysql
  • sybase_ct

Les SAPI suivants ont été supprimés de PHP 7 -

  • aolserver
  • apache
  • apache_hooks
  • apache2filter
  • caudium
  • continuity
  • isapi
  • milter
  • nsapi
  • phttpd
  • pi3web
  • roxen
  • thttpd
  • tux
  • webjames