recherche
Maisondéveloppement back-endtutoriel phpDébogage de PHP interactif avec PSYSH

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é . Voyons maintenant ce qui est intéressant à propos de Psysh et d'objets.

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:
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

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> {}
>>> $foo->setA('hello');
=> null
>>> $foo->getA();
=> "hello"
>>></foo>

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> {}
>>> $foo->setA('hello');
=> null
>>> $foo->getA();
=> "hello"
>>></foo>

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></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></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!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
L'utilisation continue de PHP: raisons de son enduranceL'utilisation continue de PHP: raisons de son enduranceApr 19, 2025 am 12:23 AM

Ce qui est encore populaire, c'est la facilité d'utilisation, la flexibilité et un écosystème fort. 1) La facilité d'utilisation et la syntaxe simple en font le premier choix pour les débutants. 2) étroitement intégré au développement Web, excellente interaction avec les demandes HTTP et la base de données. 3) L'énorme écosystème fournit une multitude d'outils et de bibliothèques. 4) La nature active et la nature open source les adaptent à de nouveaux besoins et tendances technologiques.

PHP et Python: explorer leurs similitudes et leurs différencesPHP et Python: explorer leurs similitudes et leurs différencesApr 19, 2025 am 12:21 AM

PHP et Python sont tous deux des langages de programmation de haut niveau qui sont largement utilisés dans le développement Web, le traitement des données et les tâches d'automatisation. 1.Php est souvent utilisé pour créer des sites Web dynamiques et des systèmes de gestion de contenu, tandis que Python est souvent utilisé pour créer des cadres Web et une science des données. 2.PHP utilise Echo pour sortir du contenu, Python utilise l'impression. 3. Les deux prennent en charge la programmation orientée objet, mais la syntaxe et les mots clés sont différents. 4. PHP prend en charge la conversion de type faible, tandis que Python est plus strict. 5. L'optimisation des performances PHP comprend l'utilisation de la programmation OPCACH et asynchrone, tandis que Python utilise la programmation CPROFILE et asynchrone.

PHP et Python: différents paradigmes expliquésPHP et Python: différents paradigmes expliquésApr 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.

PHP et Python: une plongée profonde dans leur histoirePHP et Python: une plongée profonde dans leur histoireApr 18, 2025 am 12:25 AM

PHP est originaire en 1994 et a été développé par Rasmuslerdorf. Il a été utilisé à l'origine pour suivre les visiteurs du site Web et a progressivement évolué en un langage de script côté serveur et a été largement utilisé dans le développement Web. Python a été développé par Guidovan Rossum à la fin des années 1980 et a été publié pour la première fois en 1991. Il met l'accent sur la lisibilité et la simplicité du code, et convient à l'informatique scientifique, à l'analyse des données et à d'autres domaines.

Choisir entre PHP et Python: un guideChoisir entre PHP et Python: un guideApr 18, 2025 am 12:24 AM

PHP convient au développement Web et au prototypage rapide, et Python convient à la science des données et à l'apprentissage automatique. 1.Php est utilisé pour le développement Web dynamique, avec une syntaxe simple et adapté pour un développement rapide. 2. Python a une syntaxe concise, convient à plusieurs champs et a un écosystème de bibliothèque solide.

PHP et frameworks: moderniser la languePHP et frameworks: moderniser la langueApr 18, 2025 am 12:14 AM

PHP reste important dans le processus de modernisation car il prend en charge un grand nombre de sites Web et d'applications et d'adapter les besoins de développement via des cadres. 1.Php7 améliore les performances et introduit de nouvelles fonctionnalités. 2. Des cadres modernes tels que Laravel, Symfony et Codeigniter simplifient le développement et améliorent la qualité du code. 3. L'optimisation des performances et les meilleures pratiques améliorent encore l'efficacité de l'application.

Impact de PHP: développement Web et au-delàImpact de PHP: développement Web et au-delàApr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

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.

See all articles

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 !

Outils chauds

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.