Heim > Backend-Entwicklung > PHP-Tutorial > Interaktives PHP -Debuggen mit Psysh

Interaktives PHP -Debuggen mit Psysh

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2025-02-19 10:15:10
Original
417 Leute haben es durchsucht

Interaktives PHP -Debuggen mit Psysh

Es ist 1:00 Uhr, die Frist für die Lieferung Ihrer Webanwendung beträgt 8 Stunden ... und es funktioniert nicht. Wenn Sie versuchen herauszufinden, was los ist, füllen Sie Ihren Code mit var_dump () und sterben () überall, um zu sehen, wo der Fehler ist…

Sie sind verärgert. Jedes Mal, wenn Sie einen Rückgabewert oder eine variable Zuordnung ausprobieren möchten, müssen Sie Ihren Quellcode ändern, Ihre Anwendung ausführen und die Ergebnisse sehen. Am Ende sind Sie sich nicht sicher, ob Sie alle diese var_dumps entfernt haben oder nicht der Code. Ist Ihnen diese Situation bekannt?

Key Takeaways

  • psysh ist ein leistungsstarkes ReP -Tool für PHP, das das Debugging durch sofortige Interaktion und Ausführung von PHP -Code verbessert, ähnlich einer JavaScript -Konsole in einem Browser.
  • Die Installation von PSYSH kann weltweit oder pro Projekt mit Composer durchgeführt werden und unterstützt eine Reihe von Befehlen zur Überprüfung und Manipulation des Code zur Laufzeit.
  • Durch die Verwendung von Befehlen wie "ls", "show" und "help" können Entwickler Variablen inspizieren, Methodendefinitionen anzeigen und detaillierte Informationen über den Code direkt in der Konsole erhalten.
  • psysh kann direkt in PHP -Skripte oder Unit -Tests integriert werden, um eine Live -Debugging -Umgebung bereitzustellen, die besonders nützlich ist, um Fehler in komplexen Anwendungen zu identifizieren und zu beheben.
  • Das Tool bietet ein nahtloses Debugging-Erlebnis sowohl in Befehlszeilenschnittstellen als auch in integrierten PHP-Webservern, obwohl es nicht mit externen Webservern wie Apache kompatibel ist.

psysh zur Rettung

psysh ist eine Read-Eval-Print-Schleife (oder Reply). Möglicherweise haben Sie zuvor eine Reply über die JavaScript -Konsole Ihres Browsers verwendet. Wenn Sie haben, wissen Sie, dass es viel Macht besitzt und nützlich sein kann, während Sie Ihren JS -Code debuggen.

Wenn Sie über PHP sprechen, haben Sie möglicherweise zuvor die interaktive Konsole von PHP (PHP -A) verwendet. Dort können Sie einen Code schreiben und die Konsole wird ihn ausführen, sobald Sie die Eingabetaste drücken:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Leider ist die interaktive Hülle keine Repon, da sie das „P“ fehlt (Druck). Ich musste eine Echo -Erklärung ausführen, um den Inhalt von $ a zu sehen. In einer echten Reply hätten wir es unmittelbar nach der Zuweisung des Werts gesehen.

Sie können PSYSH entweder mit einem Komponisten -G -Forderungsanweis oder des Herunterladens der ausführbaren PSYSH -Datei:

installieren:

Komponist
composer g require psy/psysh:~0.1
psysh
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Direkter Download (Linux/Mac)
wget psysh.org/psysh
chmod +x psysh
./psysh
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Zusätzlich können Sie es pro Projekt mit Composer aufnehmen, wie Sie später in diesem Artikel sehen werden.

Lassen Sie uns jetzt ein wenig mit Psysh spielen.
./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Haupthilfe wird Ihr bester Freund sein. Das gibt Ihnen alle möglichen Befehle und ihre Erklärungen:
>>> 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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
>>> 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_.*/
 >>>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

im Grunde genommen kann eine Replikation tun:
<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Bitte beachten Sie, dass PsySH den $ a -Wert druckt, sobald er zugewiesen ist, wenn wir PsySH mit der interaktiven Konsole von PHP vergleichen.

Ein komplexeres Beispiel kann wie folgt sein:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ich habe die Funktion Say () definiert und sie aufgerufen. Diese beiden Null, die Sie sehen, sind, weil weder die Funktionsdefinition noch ihre Ausführung einen Wert zurückgegeben haben (die Funktion spiegelt den Wert an). Während der Definition der Funktion änderte sich die Eingabeaufforderung von >>> zu ....

Können wir eine Klasse definieren und sie instanziieren?

composer g require psy/psysh:~0.1
psysh
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn ich Foo instanziierte, gab der Konstruktor einen Verweis auf das Objekt zurück. Aus diesem Grund druckte Psysh . Lassen Sie uns nun sehen, was an Psysh und Objekten interessant ist.

wget psysh.org/psysh
chmod +x psysh
./psysh
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie zufällig vergessen haben, welche Methoden die Klasse Foo definiert hat, haben Sie jetzt die Antwort. Haben Sie eine Linux -OS- oder Mac -Befehlszeilenschnittstelle verwendet? Dann sind Sie mit dem LS -Befehl vertraut. Erinnere dich an die -la -Optionen?

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

süß, nicht wahr?

Die wahre Leistung von

psysh leuchtet bei Integration in eine Webanwendung. Erstellen wir also eine.

Demo -App

Ich werde eine kurze Anwendung implementieren, um das Designmuster des Dekorationsdesigns zu präsentieren. Das UML -Klassendiagramm eines solchen Musters lautet wie folgt:
Interaktives PHP -Debuggen mit Psysh

Machen Sie sich keine Sorgen, wenn Sie nicht viel über UML- oder Designmuster wissen. Für diesen Artikel ist es nicht erforderlich, sie zu verstehen.

Auch für dieses Projekt habe ich eine Reihe von Testfällen erstellt. Diese Testfälle können von Phpunit durchgeführt werden. Auch hier müssen Sie mit Unit -Tests nicht vertraut sein, um diesen Artikel zu verstehen.

Der vollständige Quellcode für diese kleine Anwendung finden Sie unter https://github.com/sitepoint-examples/psysh

Definieren wir unsere Datei Composer.json, um eine Abhängigkeit von PsySH zu erklären:

>>> 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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Nach einer Komponist -Installation sollten Sie gut gehen.

Sehen Sie sich den folgenden Quellcode von der Datei public/decorator.php an. Es wird die SimpleWindow, DecoratedWindow und Titelwindow -Objekte instanziieren, um das Dekorateurmuster zu präsentieren:

>>> 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_.*/
 >>>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wir können den Code über PHP -CLI (Befehlszeilenschnittstelle) oder über einen Webserver ausführen, wenn einer konfiguriert ist. Wir können auch den internen Webserver von PHP verwenden.

Debugging in cli

Die Ausführung des obigen Codes über die Befehlszeilenschnittstelle sieht so aus:

<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wie können wir mit Psysh interagieren? Fügen Sie einfach psyshell :: debug (get_defined_vars ()) hinzu; Überall auf dem Code, in dem Sie Ihre Anwendung debuggen, in der Regel einfügen Sie eine Anweisung var_dump ():

>>> function say($a) {
...     echo $a;
... }
=> null
>>> say('hello');
hello
=> null
>>>
Nach dem Login kopieren
Nach dem Login kopieren

Nach dem Speichern der Datei erhalten wir die folgende Ausgabe:

>>> 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"
>>>
Nach dem Login kopieren
Nach dem Login kopieren

Die Ausführung des Skripts wird suspendiert, und wir haben jetzt PsySHs Aufforderung zum Spielen. Ich bestehe Get_Defined_vars () als Parameter an psyshell :: debug (), also habe ich Zugriff auf alle definierten Variablen in der Shell:

>>> ls $foo
Class Methods: getA, setA
>>>
Nach dem Login kopieren
Nach dem Login kopieren

untersuchen wir die $ -Ffenstervariable:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Etwas Schönes, wenn es darum geht, Psysh in einer Anwendung zu haben, ist, dass wir den Quellcode eines instanziierten Objekts untersuchen können.

composer g require psy/psysh:~0.1
psysh
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

$ sofenster ist eine Instanz von SimpleWindow, die die Fensterschnittstelle implementiert. Ich frage mich, wie der Quellcode für die Fensterschnittstelle aussieht…

wget psysh.org/psysh
chmod +x psysh
./psysh
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Warum haben SimpleWindow und DecoratedWindow die gleiche Ausgabe? Untersuchen wir das $ decoratedWindow -Objekt.

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieses Objekt ist "schwerer" als der SimpleWindow -

>>> 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
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Die GetWindowReference () -Methode wird aufgerufen, und dann wird das Ergebnis aus der Render () -Methode zurückgegeben. Überprüfen Sie die GetWindowReference () Quelle:

>>> 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_.*/
 >>>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Diese Methode gibt die Fensterreferenzeigenschaft des Objekts zurück, und wie wir aus dem obigen LS -Al -Befehl gesehen haben, handelt es sich um eine Instanz von AcmePattersDeCoratorsimpleWindow. Natürlich hätten wir uns nur ansehen können, wie dekoriert :: __ construct () funktioniert, aber dies ist eine andere Möglichkeit, die wir überprüfen können.

Debuggen mit dem eingebetteten Server

Leider wird das Debuggen durch einen Webserver wie Apache nicht unterstützt. Wir können jedoch unsere Anwendung mit dem eingebetteten Server von PHP debuggen:

<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Der Entwicklungsserver hört jetzt nach Verbindungen auf Port 8080. Sobald wir die Datei Decorator.php über diesen Webserver anfordern (https: // localhost: 8080/dekorator.php) sollten wir Folgendes sehen:

>>> function say($a) {
...     echo $a;
... }
=> null
>>> say('hello');
hello
=> null
>>>
Nach dem Login kopieren
Nach dem Login kopieren
Wir können mit Psysh mit dem Cli

mit Psysh spielen

>>> 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"
>>>
Nach dem Login kopieren
Nach dem Login kopieren
Debugging mit Unit -Tests

Als guter Entwickler sollten Sie Unit -Tests für Ihren Code als Beweis dafür schreiben, dass er wie erwartet funktioniert. In den Dateien des Projekts finden Sie den Ordner Tests. Wenn Sie Phpunit installiert haben, können Sie die Tests darin ausführen.

>>> ls $foo
Class Methods: getA, setA
>>>
Nach dem Login kopieren
Nach dem Login kopieren
Obwohl der Code fehlerfrei zu laufen scheint, fällt ein Test aus. Wir können weiter untersuchen, indem wir nur den fehlerhaften Test ausführen:

>>> ls -la $foo
Class Properties:

  $a   "hello" 
  

Class Methods:

  getA   public function getA()
  setA   public function setA($a)
Nach dem Login kopieren
Wir haben den Test, die Datei und die Zeile, in der der Fehler generiert wird. Schauen wir uns einen Titel "titwindowtest.php

" an

{
    "name": "example/psysh",
    "authors": [
        {
            "name": "John Doe",
            "email": "john@doe.tst"
        }
    ],
    "require": {
        "psy/psysh": "~0.1"
    },
    "autoload": {
        "psr-4": {"Acme\": "src/"}
    }
}
Nach dem Login kopieren
Wenn Sie mit Phpunit nicht vertraut sind, achten Sie dem Code nicht zu viel Aufmerksamkeit. Kurz gesagt, ich richte alles ein, um die mit dem Titel geplante Methode zu testen und zu erwarten, einen nicht leeren Wert zu erhalten.

Wie können wir Psysh verwenden, um zu überprüfen, was los ist? Fügen Sie einfach die Shell :: Debug () -Methode hinzu, wie wir es zuvor getan haben.

<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>
Nach dem Login kopieren
Wir sind bereit zu rocken!

php public/decorator.php 

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

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

Titled Simple Window
+-------------+
|Title        |
+-------------+
|             |
|             |
|             |
|             |
|             |
+-------------+
Nach dem Login kopieren
In $ rs sollten wir also eine Zeichenfolge haben; Mal sehen, was wir wirklich haben.

<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>
Nach dem Login kopieren
Nullwert, kein Wunder, dass der Test fehlgeschlagen ist. Überprüfen Sie den Quellcode von Titelwindow :: Addtitle (). Wenn wir einen LS -Befehl ausführen, können wir sehen, dass die Methode dieses Objekts über das $ titledWindow -Objekt verfügbar ist.

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Da ist der Fehler. Die Methode wiederholt den Wert, anstatt ihn zurückzugeben. Obwohl die Anwendung richtig zu funktionieren scheint, haben wir durch Unit -Tests und Psysh einen Defekt entdeckt und können ihn jetzt beheben.

Schlussfolgerung

Dieser Artikel sollte nicht erschöpfend sein, um alle potenziellen Psysh zu präsentieren. Es gibt andere coole Funktionen (wie "doc"), die Sie ausprobieren sollten. Psysh allein ist vielleicht nicht sehr nützlich, aber in Kombination mit anderen Tools und Ihren cleveren Debugging -Kräften kann es sich als wertvolles Kapital erweisen.

häufig gestellte Fragen (FAQs) zum interaktiven PHP -Debuggen mit Psysh

Was ist Psysh und wie funktioniert es beim PHP-Debuggen? Es bietet eine interaktive Befehlszeilenschnittstelle, in der Sie PHP-Code ausführen und die Ausgabe sofort ansehen können. PSYSH ist besonders nützlich für das Debuggen, da Sie Ihren Code durchlaufen, Variablen inspizieren und Änderungen interaktiv testen können. Es ist, als würde man ein Gespräch mit Ihrem Code führen, was zu einer besseren Verständnis und einer schnelleren Fehlerauflösung führen kann. Abhängigkeitsmanagement -Tool für PHP. Sie können es installieren, indem Sie den Befehlskomponisten Global ausführen. Erfordert Psy/Psysh. Nach der Installation können Sie PsySH starten, indem Sie Psysh einfach in Ihr Terminal eingeben. Stellen Sie sicher Sie können Psysh () einfügen; Zu jedem Zeitpunkt in Ihrem Code, in dem Sie eine interaktive Debugging -Sitzung starten möchten. Wenn Ihre Codeausführung diesen Punkt erreicht, öffnet PsySH eine interaktive Shell, sodass Sie Variablen überprüfen, Code ausführen und Ihre Codeausführung durchführen können.

Ja, PsySH kann sehr nützlich für Unit -Tests in PHP sein. Sie können PSYSH verwenden, um Ihre Tests interaktiv zu debuggen, Variablen zu inspizieren und zu einem bestimmten Zeitpunkt während der Testausführung zu bestimmen. Dies kann besonders nützlich sein, um zu verstehen, warum ein Test fehlschlägt.

Wie kann ich die PSYSH -Konfiguration anpassen? Heimverzeichnis. In dieser Datei können Sie Konfigurationsoptionen wie Standardeinschluss, Fehlerebene und Befehlsverlaufsgröße festlegen. Sie können auch benutzerdefinierte Befehle oder Reinigungsmittel hinzufügen.

Was sind einige erweiterte Funktionen von Psysh? Dazu gehören Codeausführung mit Laufzeit, automatische Semikolon -Einfügung, Namespace -Support, Readline -Unterstützung, Ausnahmebehandlung und vieles mehr. PSYSH unterstützt auch die Registerkartenvervollständigung für Variablen, Funktionen, Klassen und sogar PHP-integrierte Schlüsselwörter. Wenn ein Fehler oder eine Ausnahme auftritt, zeigt PsySH eine detaillierte Stapelverfolgung an, die Ihnen hilft, genau zu verstehen, wo und warum der Fehler aufgetreten ist. Sie können auch den WTF -Befehl verwenden, um die letzte Ausnahmestapelverfolgung jederzeit anzuzeigen.

Kann ich Psysh mit meinem bevorzugten PHP -Framework verwenden? einschließlich Laravel, Symfony und Zend Framework. Einige Frameworks wie Laravel enthalten sogar Psysh für ihren Bastelbefehl.

Wie kann ich zum PsySH-Projekt beitragen? Sie können zum Projekt beitragen, indem Sie Fehler melden, Funktionen vorschlagen oder Pull -Anfragen senden. Lesen Sie vor dem Beitrag die beitragenden Richtlinien des Projekts. Über Psysh. Dazu gehören detaillierte Dokumentation, Verwendungsbeispiele und eine Liste der verfügbaren Befehle. Sie können auch Tutorials und Artikel in verschiedenen PHP- und Entwicklerblogs finden.

Das obige ist der detaillierte Inhalt vonInteraktives PHP -Debuggen mit Psysh. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage