Débogage de PHP interactif avec PSYSH
Il est 1 h 00, la date limite de la livraison de votre application Web est dans 8 heures… et cela ne fonctionne pas. Alors que vous essayez de comprendre ce qui se passe, vous remplissez votre code avec var_dump () et die () partout pour voir où se trouve le bogue…
vous êtes ennuyé. Chaque fois que vous souhaitez essayer une valeur de retour ou une affectation de variable, vous devez modifier votre code source, exécuter votre application et voir les résultats… En fin de compte, vous n'êtes pas sûr de savoir si vous avez supprimé tous ces var_dumps de le code. Cette situation vous est-elle familière?
Les plats clés
- PSYSH est un puissant outil de remplacement pour PHP qui améliore le débogage en permettant une interaction immédiate et une exécution du code PHP, similaire à une console JavaScript dans un navigateur.
- L'installation de PSYSH peut être effectuée à l'échelle mondiale ou par projet à l'aide de Composer, et il prend en charge un tableau de commandes d'inspection et de manipulation du code à l'exécution.
- En utilisant des commandes comme «LS», «Show» et «Help», les développeurs peuvent inspecter les variables, afficher les définitions de méthode et obtenir des informations détaillées sur le code directement dans la console.
- psysh peut être intégré directement dans les scripts PHP ou les tests unitaires pour fournir un environnement de débogage en direct, ce qui est particulièrement utile pour identifier et corriger les bogues dans des applications complexes.
- L'outil offre une expérience de débogage transparent à la fois dans les interfaces de ligne de commande et les serveurs Web PHP intégrés, bien qu'il ne soit pas compatible avec des serveurs Web externes comme Apache.
psysh à la rescousse
Psysh est une boucle de lecture-EVAL (ou REPL). Vous avez peut-être utilisé un REPL avant via la console JavaScript de votre navigateur. Si vous l'avez fait, vous savez qu'il possède beaucoup de puissance et peut être utile lors de la débogage de votre code JS.
En parlant de PHP, vous avez peut-être déjà utilisé la console interactive de PHP (PHP -A). Là, vous pouvez écrire du code et la console l'exécutera dès que vous appuyez sur Entrée:
php -a Interactive shell php > $a = 'Hello world!'; php > echo $a; Hello world! php >
Malheureusement, le shell interactif n'est pas un REPT car il n'a pas le «P» (imprimé). J'ai dû exécuter une déclaration d'écho pour voir le contenu de $ a. Dans un vrai REP, nous l'aurions vu immédiatement après lui avoir attribué la valeur.
Vous pouvez installer Psysh globalement avec un compositeur G exiger, soit télécharger l'exécutable PSYSH:
Composer
composer g require psy/psysh:~0.1 psysh
Téléchargement direct (Linux / Mac)
wget psysh.org/psysh chmod +x psysh ./psysh
De plus, vous pouvez le faire inclure par projet avec Composer comme vous le verrez plus loin dans cet article.
Maintenant, jouons un peu avec Psysh.
./psysh Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman >>>
L'aide principale sera votre meilleur ami. C'est ce qui vous donnera toutes sortes de commandes et leurs explications:
>>> help help Show a list of commands. Type `help [foo]` for information about [foo]. Aliases: ? ls List local, instance or class variables, methods and constants. Aliases: list, dir dump Dump an object or primitive. doc Read the documentation for an object, class, constant, method or property. Aliases: rtfm, man show Show the code for an object, class, constant, method or property. wtf Show the backtrace of the most recent exception. Aliases: last-exception, wtf? trace Show the current call stack. buffer Show (or clear) the contents of the code input buffer. Aliases: buf clear Clear the Psy Shell screen. history Show the Psy Shell history. exit End the current session and return to caller. Aliases: quit, q
>>> help ls Usage: ls [--vars] [-c|--constants] [-f|--functions] [-k|--classes] [-I|--interfaces] [-t|--traits] [-p|--properties] [-m|--methods] [-G|--grep="..."] [-i|--insensitive] [-v|--invert] [-g|--globals] [-n|--internal] [-u|--user] [-C|-- category="..."] [-a|--all] [-l|--long] [target] Aliases: list, dir Arguments: target A target class or object to list. Options: --vars Display variables. --constants (-c) Display defined constants. --functions (-f) Display defined functions. --classes (-k) Display declared classes. --interfaces (-I) Display declared interfaces. --traits (-t) Display declared traits. --properties (-p) Display class or object properties (public properties by default). --methods (-m) Display class or object methods (public methods by default). --grep (-G) Limit to items matching the given pattern (string or regex). --insensitive (-i) Case-insensitive search (requires --grep). --invert (-v) Inverted search (requires --grep). --globals (-g) Include global variables. --internal (-n) Limit to internal functions and classes. --user (-u) Limit to user-defined constants, functions and classes. --category (-C) Limit to constants in a specific category (e.g. "date"). --all (-a) Include private and protected methods and properties. --long (-l) List in long format: includes class names and method signatures. Help: List variables, constants, classes, interfaces, traits, functions, methods, and properties. Called without options, this will return a list of variables currently in scope. If a target object is provided, list properties, constants and methods of that target. If a class, interface or trait name is passed instead, list constants and methods on that class. e.g. >>> ls >>> ls $foo >>> ls -k --grep mongo -i >>> ls -al ReflectionClass >>> ls --constants --category date >>> ls -l --functions --grep /^array_.*/ >>>
Fondamentalement, ce qu'un REP peut faire est:
<span>>>> $a = 'hello'; </span><span>=> "hello" </span><span>>>></span>
Veuillez noter que si nous comparons PSYSH à la console interactive de PHP, PSYSH imprime la valeur $ A dès son attribution.
Un exemple plus complexe peut être le suivant:
php -a Interactive shell php > $a = 'Hello world!'; php > echo $a; Hello world! php >
J'ai défini la fonction Say () et je l'ai invoquée. Ces deux nuls que vous voyez sont parce que ni la définition de la fonction ni son exécution n'ont renvoyé une valeur (la fonction fait écho à la valeur). De plus, tout en définissant la fonction, l'invite est passée de >>> à ....
pouvons-nous définir une classe et l'instancier?
composer g require psy/psysh:~0.1 psysh
Lorsque j'ai instancié FOO, le constructeur a renvoyé une référence à l'objet. C'est pourquoi PSYSH imprimé
wget psysh.org/psysh chmod +x psysh ./psysh
Si par hasard, vous avez oublié quelles méthodes que la classe Foo a définies, vous avez maintenant la réponse. Avez-vous utilisé une interface de ligne de commande Linux OS ou Mac? Ensuite, vous connaissez peut-être la commande LS. Rappelez-vous les options -La?
./psysh Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman >>>
doux, n'est-ce pas?
La véritable puissance de PSYSH brille lorsqu'elle est intégrée à une application Web, alors créons une.
application de démonstration
Je vais implémenter une application rapide pour présenter le modèle de conception du décorateur. Le diagramme de classe UML d'un tel modèle est le suivant:
Ne vous inquiétez pas si vous ne savez pas grand-chose sur UML ou les modèles de conception, les comprendre n'est pas requis pour cet article.
Aussi pour ce projet, j'ai créé un ensemble de cas de test. Ces cas de test peuvent être exécutés par phpunit. Encore une fois, vous n'avez pas besoin de vous familiariser avec les tests unitaires pour comprendre cet article.
Le code source complet de cette petite application peut être trouvé sur https://github.com/sitepoint-examples/psysh
Tout d'abord, définissons notre fichier composer.json afin de déclarer une dépendance à Psysh:
>>> help help Show a list of commands. Type `help [foo]` for information about [foo]. Aliases: ? ls List local, instance or class variables, methods and constants. Aliases: list, dir dump Dump an object or primitive. doc Read the documentation for an object, class, constant, method or property. Aliases: rtfm, man show Show the code for an object, class, constant, method or property. wtf Show the backtrace of the most recent exception. Aliases: last-exception, wtf? trace Show the current call stack. buffer Show (or clear) the contents of the code input buffer. Aliases: buf clear Clear the Psy Shell screen. history Show the Psy Shell history. exit End the current session and return to caller. Aliases: quit, q
Après une installation de compositeur, vous devriez être prêt à partir.
Veuillez jeter un œil au code source suivant du fichier public / décorateur.php. Il instanciera les objets SimpleWindow, DecoratedWindow et intitulé Window pour présenter le motif du décorateur:
>>> help ls Usage: ls [--vars] [-c|--constants] [-f|--functions] [-k|--classes] [-I|--interfaces] [-t|--traits] [-p|--properties] [-m|--methods] [-G|--grep="..."] [-i|--insensitive] [-v|--invert] [-g|--globals] [-n|--internal] [-u|--user] [-C|-- category="..."] [-a|--all] [-l|--long] [target] Aliases: list, dir Arguments: target A target class or object to list. Options: --vars Display variables. --constants (-c) Display defined constants. --functions (-f) Display defined functions. --classes (-k) Display declared classes. --interfaces (-I) Display declared interfaces. --traits (-t) Display declared traits. --properties (-p) Display class or object properties (public properties by default). --methods (-m) Display class or object methods (public methods by default). --grep (-G) Limit to items matching the given pattern (string or regex). --insensitive (-i) Case-insensitive search (requires --grep). --invert (-v) Inverted search (requires --grep). --globals (-g) Include global variables. --internal (-n) Limit to internal functions and classes. --user (-u) Limit to user-defined constants, functions and classes. --category (-C) Limit to constants in a specific category (e.g. "date"). --all (-a) Include private and protected methods and properties. --long (-l) List in long format: includes class names and method signatures. Help: List variables, constants, classes, interfaces, traits, functions, methods, and properties. Called without options, this will return a list of variables currently in scope. If a target object is provided, list properties, constants and methods of that target. If a class, interface or trait name is passed instead, list constants and methods on that class. e.g. >>> ls >>> ls $foo >>> ls -k --grep mongo -i >>> ls -al ReflectionClass >>> ls --constants --category date >>> ls -l --functions --grep /^array_.*/ >>>
Nous pouvons exécuter le code via CLI de PHP (interface de ligne de commande) ou via un serveur Web si l'on est configuré. Nous pouvons également utiliser le serveur Web interne de PHP.
Débogage dans CLI
L'exécution du code ci-dessus via l'interface de ligne de commande ressemblera à ceci:
<span>>>> $a = 'hello'; </span><span>=> "hello" </span><span>>>></span>
Comment pouvons-nous interagir avec PSYSH? Ajoutez simplement Psyshell :: Debug (get_defined_vars ()); n'importe où sur le code où vous souhaitez déboguer votre application, généralement où vous insérez une instruction var_dump ():
>>> function say($a) { ... echo $a; ... } => null >>> say('hello'); hello => null >>>
Après avoir enregistré le fichier, nous obtiendrons la sortie suivante:
>>> class Foo ... { ... protected $a; ... ... public function setA($a) { ... $this->a = $a; ... } ... ... public function getA() { ... return $this->a; ... } ... } => null >>> $foo = new Foo(); => <Foo #000000001dce50dd000000002dda326e> {} >>> $foo->setA('hello'); => null >>> $foo->getA(); => "hello" >>>
L'exécution du script sera suspendue, et nous avons maintenant l'invite de PSYSH pour jouer avec. Je passe get_defined_vars () en tant que paramètre à psyshell :: debug () donc j'ai accès à toutes les variables définies à l'intérieur de la coque:
>>> ls $foo Class Methods: getA, setA >>>
Examinons la variable de fenêtre $:
php -a Interactive shell php > $a = 'Hello world!'; php > echo $a; Hello world! php >
quelque chose de bien d'avoir Psysh dans une application est que nous pouvons examiner le code source d'un objet instancié.
composer g require psy/psysh:~0.1 psysh
Donc, $ Window est une instance de Simplewindow, qui implémente l'interface de la fenêtre… Je me demande à quoi ressemble le code source de l'interface de la fenêtre…
wget psysh.org/psysh chmod +x psysh ./psysh
Pourquoi Simplewindow et DecoratedWindow ont-ils la même sortie? Examinons l'objet $ décoré.
./psysh Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman >>>
Cet objet est «plus lourd» que celui de Widlewindow, donc le code source peut être long… Voyons le code source de la méthode Render () uniquement:
>>> help help Show a list of commands. Type `help [foo]` for information about [foo]. Aliases: ? ls List local, instance or class variables, methods and constants. Aliases: list, dir dump Dump an object or primitive. doc Read the documentation for an object, class, constant, method or property. Aliases: rtfm, man show Show the code for an object, class, constant, method or property. wtf Show the backtrace of the most recent exception. Aliases: last-exception, wtf? trace Show the current call stack. buffer Show (or clear) the contents of the code input buffer. Aliases: buf clear Clear the Psy Shell screen. history Show the Psy Shell history. exit End the current session and return to caller. Aliases: quit, q
La méthode getWindowReference () est invoquée, puis il renvoie le résultat de la méthode render (). Vérifions la source GetWindowReference ():
>>> help ls Usage: ls [--vars] [-c|--constants] [-f|--functions] [-k|--classes] [-I|--interfaces] [-t|--traits] [-p|--properties] [-m|--methods] [-G|--grep="..."] [-i|--insensitive] [-v|--invert] [-g|--globals] [-n|--internal] [-u|--user] [-C|-- category="..."] [-a|--all] [-l|--long] [target] Aliases: list, dir Arguments: target A target class or object to list. Options: --vars Display variables. --constants (-c) Display defined constants. --functions (-f) Display defined functions. --classes (-k) Display declared classes. --interfaces (-I) Display declared interfaces. --traits (-t) Display declared traits. --properties (-p) Display class or object properties (public properties by default). --methods (-m) Display class or object methods (public methods by default). --grep (-G) Limit to items matching the given pattern (string or regex). --insensitive (-i) Case-insensitive search (requires --grep). --invert (-v) Inverted search (requires --grep). --globals (-g) Include global variables. --internal (-n) Limit to internal functions and classes. --user (-u) Limit to user-defined constants, functions and classes. --category (-C) Limit to constants in a specific category (e.g. "date"). --all (-a) Include private and protected methods and properties. --long (-l) List in long format: includes class names and method signatures. Help: List variables, constants, classes, interfaces, traits, functions, methods, and properties. Called without options, this will return a list of variables currently in scope. If a target object is provided, list properties, constants and methods of that target. If a class, interface or trait name is passed instead, list constants and methods on that class. e.g. >>> ls >>> ls $foo >>> ls -k --grep mongo -i >>> ls -al ReflectionClass >>> ls --constants --category date >>> ls -l --functions --grep /^array_.*/ >>>
Cette méthode renvoie la propriété WindowReference de l'objet, et comme nous l'avons vu à partir de la commande ls -al ci-dessus, il s'agit d'une instance d'AcmepatternsdecoratorsImplewindow. Bien sûr, nous aurions pu voir comment fonctionne DecoratedWindow :: __ Construct (), mais c'est une autre façon de vérifier.
Débogage avec le serveur intégré
Malheureusement, le débogage à travers un serveur Web comme Apache n'est pas pris en charge. Cependant, nous pouvons déboguer notre application à l'aide du serveur intégré de PHP:
<span>>>> $a = 'hello'; </span><span>=> "hello" </span><span>>>></span>
Le serveur de développement écoute maintenant les connexions sur le port 8080, donc dès que nous demandons le fichier décorateur.php via ce serveur Web (https: // localhost: 8080 / décorateur.php), nous devrions voir ce qui suit:
>>> function say($a) { ... echo $a; ... } => null >>> say('hello'); hello => null >>>
Nous pouvons commencer à jouer avec Psysh comme nous l'avons fait avec le cli
>>> class Foo ... { ... protected $a; ... ... public function setA($a) { ... $this->a = $a; ... } ... ... public function getA() { ... return $this->a; ... } ... } => null >>> $foo = new Foo(); => <Foo #000000001dce50dd000000002dda326e> {} >>> $foo->setA('hello'); => null >>> $foo->getA(); => "hello" >>>
Débogage avec les tests unitaires
En tant que bon développeur, vous devez écrire des tests unitaires pour votre code comme preuve que cela fonctionne comme prévu. Dans les fichiers du projet, vous trouverez le dossier des tests, et si vous avez installé PHPUnit, vous pouvez exécuter les tests à l'intérieur.
>>> ls $foo Class Methods: getA, setA >>>
Même si le code semble s'exécuter parfaitement, un test échoue. Nous pouvons examiner davantage en exécutant uniquement le test d'échec:
>>> ls -la $foo Class Properties: $a "hello" Class Methods: getA public function getA() setA public function setA($a)
Nous avons le test, le fichier et la ligne où l'erreur est générée. Jetons un coup d'œil à TitedWindowTest.Php
{ "name": "example/psysh", "authors": [ { "name": "John Doe", "email": "john@doe.tst" } ], "require": { "psy/psysh": "~0.1" }, "autoload": { "psr-4": {"Acme\": "src/"} } }
Si vous n'êtes pas familier avec le phpunit, ne faites pas trop d'attention au code. En un mot, je configure tout pour tester la méthode intimewindow :: addtitle () et je m'attends à recevoir une valeur non vide.
Alors, comment utilisons-nous PSYSH pour vérifier ce qui se passe? Ajoutez simplement la méthode Shell :: Debug () comme nous l'avons fait précédemment.
<span><span><?php </span></span><span><span>chdir(dirname(__DIR__)); </span></span><span> </span><span><span>require_once('vendor/autoload.php'); </span></span><span> </span><span><span>use Acme<span>\Patterns\Decorator\SimpleWindow</span>; </span></span><span><span>use Acme<span>\Patterns\Decorator\DecoratedWindow</span>; </span></span><span><span>use Acme<span>\Patterns\Decorator\TitledWindow</span>; </span></span><span> </span><span><span>echo PHP_EOL . 'Simple Window' . PHP_EOL; </span></span><span> </span><span><span>$window = new SimpleWindow(); </span></span><span> </span><span><span>echo $window->render(); </span></span><span> </span><span><span>echo PHP_EOL . 'Decorated Simple Window' . PHP_EOL; </span></span><span> </span><span><span>$decoratedWindow = new DecoratedWindow($window); </span></span><span> </span><span><span>echo $decoratedWindow->render(); </span></span><span> </span><span><span>echo PHP_EOL . 'Titled Simple Window' . PHP_EOL; </span></span><span> </span><span><span>$titledWindow = new TitledWindow($window); </span></span><span> </span><span><span>echo $titledWindow->render();</span></span>
Nous sommes prêts à basculer!
php public/decorator.php Simple Window +-------------+ | | | | | | | | | | +-------------+ Decorated Simple Window +-------------+ | | | | | | | | | | +-------------+ Titled Simple Window +-------------+ |Title | +-------------+ | | | | | | | | | | +-------------+
Donc, dans $ rs, nous devrions avoir une chaîne; Voyons ce que nous avons vraiment.
<span><span><?php </span></span><span><span>chdir(dirname(__DIR__)); </span></span><span> </span><span><span>require_once('vendor/autoload.php'); </span></span><span> </span><span><span>//... a lot of code here </span></span><span> </span><span><span>$titledWindow = new TitledWindow($window); </span></span><span> </span><span><span>echo $titledWindow->render(); </span></span><span> </span><span><span><span>\Psy\Shell</span>::debug(get_defined_vars()); //we want to debug our application here!</span></span>
Valeur nul, pas étonnant que le test échoue… vérifions le code source de TitedWindow :: AddTitle (). Si nous effectuons une commande LS, nous pouvons voir que nous avons la méthode de cet objet disponible via l'objet $ intitulé.
php -a Interactive shell php > $a = 'Hello world!'; php > echo $a; Hello world! php >
Il y a le bug. La méthode fait écho à la valeur au lieu de la renvoyer. Même si l'application semble bien fonctionner, grâce à des tests unitaires et à Psysh, nous avons découvert un défaut et nous pouvons maintenant le réparer.
Conclusion
Cet article n'était pas censé être exhaustif dans la présentation de tout le potentiel de Psysh. Il existe d'autres fonctionnalités intéressantes (comme «Doc») que vous devriez essayer. Psysh seul n'est peut-être pas très utile, mais s'il est combiné avec d'autres outils et vos pouvoirs de débogage intelligents, cela peut s'avérer être un atout précieux.
Questions fréquemment posées (FAQ) sur le débogage interactif de PHP avec Psysh
Qu'est-ce que PSYSH et comment cela fonctionne-t-il dans le débogage de PHP?
PSYSH est une console de développeur d'exécution, un débogueur interactif et une boucle de lecture-Eval (REPL) pour PHP. Il fournit une interface de ligne de commande interactive où vous pouvez exécuter le code PHP et voir la sortie immédiatement. PSYSH est particulièrement utile pour le débogage car il vous permet de parcourir votre code, d'inspecter les variables et de tester interactivement les modifications. C'est comme avoir une conversation avec votre code, ce qui peut conduire à une meilleure compréhension et à une meilleure résolution de bogues.
Comment installer Psysh pour le débogage de PHP?
PSYSH peut être installé à l'aide d'un composer, un Outil de gestion des dépendances pour PHP. Vous pouvez l'installer en exécutant la Command Composer Global Exiger PSY / PSYSH. Après l'installation, vous pouvez démarrer PSYSH en tapant simplement Psysh dans votre terminal. Assurez-vous d'inclure les binaires Global Composer dans votre chemin afin que votre système puisse localiser l'exécutable PSYSH.
Comment puis-je utiliser PSYSH pour déboguer mon code PHP?
Pour déboguer votre code PHP à l'aide de PSYSH , vous pouvez insérer psysh (); À tout moment de votre code où vous souhaitez démarrer une session de débogage interactive. Lorsque l'exécution de votre code atteint ce point, PSYSH ouvrira un shell interactif, vous permettant d'inspecter les variables, d'exécuter du code et de parcourir l'exécution de votre code.
Puis-je utiliser PSYSH pour les tests unitaires dans PHP?
Oui, Psysh peut être très utile pour les tests unitaires en PHP. Vous pouvez utiliser PSYSH pour déboguer de manière interactive vos tests, inspecter les variables et l'état à tout moment de l'exécution du test. Cela peut être particulièrement utile pour comprendre pourquoi un test échoue.
Comment puis-je personnaliser la configuration de Psysh?
PSYSH vous permet de personnaliser sa configuration en créant un fichier .psysh.php dans votre Répertoire de la maison. Dans ce fichier, vous pouvez définir des options de configuration telles que les incluses par défaut, le niveau d'erreur et la taille de l'historique des commandes. Vous pouvez également ajouter des commandes ou des nettoyeurs personnalisés.
Quelles sont les fonctionnalités avancées de PSYSH?
PSYSH est livrée avec de nombreuses fonctionnalités avancées qui peuvent vous aider à déboguer votre code PHP plus efficacement. Il s'agit notamment de l'exécution de code avec l'exécution, de l'insertion automatique des demi-finales, de la prise en charge de l'espace de noms, de la prise en charge de la ligne de lecture, de la gestion des exceptions, etc. PSYSH prend également en charge l'achèvement de l'onglet pour les variables, les fonctions, les classes et même les mots clés intégrés PHP.
Comment PsySh gère-t-il les erreurs et les exceptions?
PSYSH a un mécanisme robuste d'erreur et de gestion des exceptions. Lorsqu'une erreur ou une exception se produit, PSYSH affichera une trace de pile détaillée, vous aidant à comprendre exactement où et pourquoi l'erreur s'est produite. Vous pouvez également utiliser la commande WTF pour afficher la dernière trace de pile d'exception à tout moment.
Puis-je utiliser Psysh avec mon framework PHP préféré?
Oui, Psysh fonctionne bien avec la plupart des frameworks PHP, y compris Laravel, Symfony et Zend Framework. Certains frameworks, comme Laravel, incluent même Psysh hors de la boîte pour leur commande Tinker.
Comment puis-je contribuer au projet PSYSH?
PSYSH est un projet open source hébergé sur github. Vous pouvez contribuer au projet en signalant des bogues, en suggérant des fonctionnalités ou en soumettant des demandes de traction. Avant de contribuer, assurez-vous de lire les directives de contribution du projet.
Où puis-je trouver plus de ressources pour en savoir plus sur Psysh?
Le site Web officiel de PSYSH et son référentiel GitHub sont les meilleurs endroits pour trouver des ressources À propos de Psysh. Ils comprennent une documentation détaillée, des exemples d'utilisation et une liste des commandes disponibles. Vous pouvez également trouver des tutoriels et des articles sur divers blogs PHP et développeurs.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

La fonction d'énumération dans PHP8.1 améliore la clarté et la sécurité du type du code en définissant les constantes nommées. 1) Les énumérations peuvent être des entiers, des chaînes ou des objets, améliorant la lisibilité du code et la sécurité des types. 2) L'énumération est basée sur la classe et prend en charge des fonctionnalités orientées objet telles que la traversée et la réflexion. 3) L'énumération peut être utilisée pour la comparaison et l'attribution pour assurer la sécurité du type. 4) L'énumération prend en charge l'ajout de méthodes pour implémenter une logique complexe. 5) La vérification stricte et la gestion des erreurs peuvent éviter les erreurs courantes. 6) L'énumération réduit la valeur magique et améliore la maintenabilité, mais prêtez attention à l'optimisation des performances.

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Les principes de conception de Restapi incluent la définition des ressources, la conception URI, l'utilisation de la méthode HTTP, l'utilisation du code d'état, le contrôle de version et les haineux. 1. Les ressources doivent être représentées par des noms et maintenues dans une hiérarchie. 2. Les méthodes HTTP devraient être conformes à leur sémantique, telles que GET est utilisée pour obtenir des ressources. 3. Le code d'état doit être utilisé correctement, tel que 404 signifie que la ressource n'existe pas. 4. Le contrôle de la version peut être implémenté via URI ou en-tête. 5. Hateoas bottise les opérations du client via des liens en réponse.

En PHP, la gestion des exceptions est réalisée grâce aux mots clés d'essai, de catch, enfin et de lancement. 1) Le bloc d'essai entoure le code qui peut lancer des exceptions; 2) Le bloc de capture gère les exceptions; 3) Enfin, Block garantit que le code est toujours exécuté; 4) Le lancer est utilisé pour lancer manuellement les exceptions. Ces mécanismes aident à améliorer la robustesse et la maintenabilité de votre code.

La fonction principale des classes anonymes en PHP est de créer des objets uniques. 1. Les classes anonymes permettent aux classes sans nom d'être définies directement dans le code, ce qui convient aux exigences temporaires. 2. Ils peuvent hériter des classes ou implémenter des interfaces pour augmenter la flexibilité. 3. Faites attention aux performances et à la lisibilité au code lorsque vous l'utilisez et évitez de définir à plusieurs reprises les mêmes classes anonymes.
