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











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

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.

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

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