Table des matières
Les plats clés
psysh à la rescousse
application de démonstration
Débogage dans CLI
Débogage avec le serveur intégré
Débogage avec les tests unitaires
Conclusion
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?
Comment installer Psysh pour le débogage de PHP?
Comment puis-je utiliser PSYSH pour déboguer mon code PHP?
Puis-je utiliser PSYSH pour les tests unitaires dans PHP?
Comment puis-je personnaliser la configuration de Psysh?
Quelles sont les fonctionnalités avancées de PSYSH?
Comment PsySh gère-t-il les erreurs et les exceptions?
Puis-je utiliser Psysh avec mon framework PHP préféré?
Comment puis-je contribuer au projet PSYSH?
Où puis-je trouver plus de ressources pour en savoir plus sur Psysh?
Maison développement back-end tutoriel php Débogage de PHP interactif avec PSYSH

Débogage de PHP interactif avec PSYSH

Feb 19, 2025 am 10:15 AM

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 >
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Téléchargement direct (Linux / Mac)

wget psysh.org/psysh
chmod +x psysh
./psysh
Copier après la connexion
Copier après la connexion
Copier après la connexion

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                                                                                                                                                                              
>>>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
>>> 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_.*/
 >>>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Fondamentalement, ce qu'un REP peut faire est:

<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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 >
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Lorsque j'ai instancié FOO, le constructeur a renvoyé une référence à l'objet. C'est pourquoi PSYSH imprimé . Voyons maintenant ce qui est intéressant à propos de Psysh et d'objets.

wget psysh.org/psysh
chmod +x psysh
./psysh
Copier après la connexion
Copier après la connexion
Copier après la connexion

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                                                                                                                                                                              
>>>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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:
Débogage de PHP interactif avec PSYSH

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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_.*/
 >>>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
>>>
Copier après la connexion
Copier après la connexion

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"
>>>
Copier après la connexion
Copier après la connexion

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
>>>
Copier après la connexion
Copier après la connexion

Examinons la variable de fenêtre $:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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                                                                                                                                                                              
>>>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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_.*/
 >>>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
>>>
Copier après la connexion
Copier après la connexion

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"
>>>
Copier après la connexion
Copier après la connexion

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
>>>
Copier après la connexion
Copier après la connexion

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)
Copier après la connexion

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/"}
    }
}
Copier après la connexion

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>
Copier après la connexion

Nous sommes prêts à basculer!

php public/decorator.php 

Simple Window
+-------------+
|             |
|             |
|             |
|             |
|             |
+-------------+

Decorated Simple Window
+-------------+
|             |
|             |
|             |
|             |
|             |
+-------------+

Titled Simple Window
+-------------+
|Title        |
+-------------+
|             |
|             |
|             |
|             |
|             |
+-------------+
Copier après la connexion

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>
Copier après la connexion

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 >
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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

<🎜>: Grow A Garden - Guide de mutation complet
3 Il y a quelques semaines By DDD
<🎜>: Bubble Gum Simulator Infinity - Comment obtenir et utiliser les clés royales
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Système de fusion, expliqué
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Comment déverrouiller le grappin
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel Java
1670
14
Tutoriel PHP
1276
29
Tutoriel C#
1256
24
Expliquez le hachage de mot de passe sécurisé dans PHP (par exemple, Password_Hash, Password_verify). Pourquoi ne pas utiliser MD5 ou SHA1? Expliquez le hachage de mot de passe sécurisé dans PHP (par exemple, Password_Hash, Password_verify). Pourquoi ne pas utiliser MD5 ou SHA1? Apr 17, 2025 am 12:06 AM

Dans PHP, Password_Hash et Password_verify Les fonctions doivent être utilisées pour implémenter le hachage de mot de passe sécurisé, et MD5 ou SHA1 ne doit pas être utilisé. 1) Password_hash génère un hachage contenant des valeurs de sel pour améliorer la sécurité. 2) Password_verify Vérifiez le mot de passe et assurez-vous la sécurité en comparant les valeurs de hachage. 3) MD5 et SHA1 sont vulnérables et manquent de valeurs de sel, et ne conviennent pas à la sécurité de mot de passe moderne.

PHP et Python: comparaison de deux langages de programmation populaires PHP et Python: comparaison de deux langages de programmation populaires Apr 14, 2025 am 12:13 AM

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

PHP en action: Exemples et applications du monde réel PHP en action: Exemples et applications du monde réel Apr 14, 2025 am 12:19 AM

PHP est largement utilisé dans le commerce électronique, les systèmes de gestion de contenu et le développement d'API. 1) E-commerce: Utilisé pour la fonction de panier et le traitement des paiements. 2) Système de gestion du contenu: utilisé pour la génération de contenu dynamique et la gestion des utilisateurs. 3) Développement des API: Utilisé pour le développement de l'API RESTful et la sécurité de l'API. Grâce à l'optimisation des performances et aux meilleures pratiques, l'efficacité et la maintenabilité des applications PHP sont améliorées.

Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables? Comment fonctionne la résistance au type PHP, y compris les types scalaires, les types de retour, les types d'union et les types nullables? Apr 17, 2025 am 12:25 AM

Le type PHP invite à améliorer la qualité et la lisibilité du code. 1) Conseils de type scalaire: Depuis PHP7.0, les types de données de base sont autorisés à être spécifiés dans les paramètres de fonction, tels que INT, Float, etc. 2) Invite de type de retour: Assurez la cohérence du type de valeur de retour de fonction. 3) Invite de type d'union: Depuis PHP8.0, plusieurs types peuvent être spécifiés dans les paramètres de fonction ou les valeurs de retour. 4) Invite de type nullable: permet d'inclure des valeurs nulles et de gérer les fonctions qui peuvent renvoyer les valeurs nulles.

La pertinence durable de PHP: est-elle toujours vivante? La pertinence durable de PHP: est-elle toujours vivante? Apr 14, 2025 am 12:12 AM

PHP est toujours dynamique et occupe toujours une position importante dans le domaine de la programmation moderne. 1) La simplicité de PHP et le soutien communautaire puissant le rendent largement utilisé dans le développement Web; 2) sa flexibilité et sa stabilité le rendent exceptionnelle dans la gestion des formulaires Web, des opérations de base de données et du traitement de fichiers; 3) PHP évolue et optimise constamment, adapté aux débutants et aux développeurs expérimentés.

PHP et Python: différents paradigmes expliqués PHP et Python: différents paradigmes expliqués Apr 18, 2025 am 12:26 AM

PHP est principalement la programmation procédurale, mais prend également en charge la programmation orientée objet (POO); Python prend en charge une variété de paradigmes, y compris la POO, la programmation fonctionnelle et procédurale. PHP convient au développement Web, et Python convient à une variété d'applications telles que l'analyse des données et l'apprentissage automatique.

Comment empêchez-vous l'injection SQL en PHP? (Déclarations préparées, APD) Comment empêchez-vous l'injection SQL en PHP? (Déclarations préparées, APD) Apr 15, 2025 am 12:15 AM

L'utilisation de déclarations de prétraitement et l'APD dans PHP peut effectivement empêcher les attaques d'injection SQL. 1) Utilisez PDO pour vous connecter à la base de données et définir le mode d'erreur. 2) Créez des instructions de prétraitement via la méthode de préparation et transmettez des données à l'aide des espaces réservés et exécutez des méthodes. 3) Traitez les résultats de la requête et assurez la sécurité et les performances du code.

PHP et Python: exemples de code et comparaison PHP et Python: exemples de code et comparaison Apr 15, 2025 am 12:07 AM

PHP et Python ont leurs propres avantages et inconvénients, et le choix dépend des besoins du projet et des préférences personnelles. 1.Php convient au développement rapide et à la maintenance des applications Web à grande échelle. 2. Python domine le domaine de la science des données et de l'apprentissage automatique.

See all articles