Rumah > pembangunan bahagian belakang > tutorial php > Debug PHP Interaktif dengan Psysh

Debug PHP Interaktif dengan Psysh

尊渡假赌尊渡假赌尊渡假赌
Lepaskan: 2025-02-19 10:15:10
asal
417 orang telah melayarinya

Debug PHP Interaktif dengan Psysh

Ia adalah 1:00 pagi, tarikh akhir untuk penghantaran aplikasi web anda adalah dalam 8 jam ... dan ia tidak berfungsi. Semasa anda cuba mengetahui apa yang sedang berlaku, anda mengisi kod anda dengan var_dump () dan mati () di mana -mana untuk melihat di mana bug itu ...

anda kesal. Setiap kali anda ingin mencuba nilai pulangan atau tugasan yang berubah -ubah, anda perlu menukar kod sumber anda, laksanakan permohonan anda, dan lihat hasilnya ... pada akhirnya, anda tidak pasti sama ada anda telah mengeluarkan semua var_dumps dari kod. Adakah keadaan ini biasa dengan anda?

Takeaways Key

    Psysh adalah alat REPT yang kuat untuk PHP yang meningkatkan debugging dengan membenarkan interaksi segera dan pelaksanaan kod PHP, sama dengan konsol JavaScript dalam penyemak imbas.
  • Pemasangan PSYSH boleh dilakukan secara global atau setiap projek menggunakan komposer, dan ia menyokong pelbagai arahan untuk memeriksa dan memanipulasi kod semasa runtime.
  • Dengan menggunakan arahan seperti `ls`,` show`, dan `bantuan`, pemaju boleh memeriksa pembolehubah, melihat definisi kaedah, dan mendapatkan maklumat terperinci mengenai kod secara langsung dalam konsol.
  • PSYSH boleh diintegrasikan terus ke dalam skrip PHP atau ujian unit untuk menyediakan persekitaran debugging secara langsung, yang sangat berguna untuk mengenal pasti dan menetapkan pepijat dalam aplikasi yang kompleks.
  • Alat ini menawarkan pengalaman debugging yang lancar dalam antara muka baris arahan dan pelayan web PHP terbina dalam, walaupun ia tidak serasi dengan pelayan web luaran seperti Apache.
  • psysh to the Rescue
psysh adalah gelung baca-eval-print (atau repl). Anda mungkin telah menggunakan REPL sebelum melalui konsol JavaScript penyemak imbas anda. Sekiranya anda mempunyai, anda tahu bahawa ia mempunyai banyak kuasa dan boleh berguna semasa menyahpepijat kod JS anda.

Bercakap tentang PHP, anda mungkin menggunakan konsol interaktif PHP (php -A) sebelum ini. Di sana, anda boleh menulis beberapa kod dan konsol akan melaksanakannya sebaik sahaja anda menekan Enter:

Malangnya, shell interaktif bukan repl kerana ia tidak mempunyai "p" (cetak). Saya terpaksa melaksanakan kenyataan Echo untuk melihat kandungan $ a. Dalam repl yang benar, kami akan melihatnya sebaik sahaja memberikan nilai kepadanya.

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
anda boleh memasang psysh secara global sama ada dengan komposer g memerlukan, atau memuat turun psysh executable:

Komposer

Muat turun langsung (Linux/Mac)

composer g require psy/psysh:~0.1
psysh
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Selain itu, anda boleh memasukkannya ke setiap projek dengan komposer seperti yang anda lihat kemudian dalam artikel ini.

wget psysh.org/psysh
chmod +x psysh
./psysh
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Sekarang mari kita bermain dengan psysh sedikit.

bantuan utama akan menjadi kawan baik anda. Itulah yang akan memberi anda pelbagai arahan dan penjelasan mereka:

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

pada dasarnya, apa yang boleh dilakukan oleh repl adalah:
>>> 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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
>>> 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_.*/
 >>>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sila ambil perhatian bahawa jika kita membandingkan Psysh terhadap konsol interaktif PHP, Psysh mencetak nilai $ A sebaik sahaja ia diberikan.

Contoh yang lebih kompleks boleh seperti berikut:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Saya menentukan fungsi berkata () dan memohonnya. Kedua -dua null yang anda lihat adalah kerana definisi fungsi atau pelaksanaannya tidak mengembalikan nilai (fungsi bergema nilai). Di samping itu, sambil menentukan fungsi, prompt berubah dari >>> ke ....

Bolehkah kita menentukan kelas dan memberi instantiate?

composer g require psy/psysh:~0.1
psysh
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Apabila saya instantiated foo, pembina mengembalikan rujukan kepada objek tersebut. Inilah sebabnya Psysh Printed . Sekarang mari kita lihat apa yang menarik mengenai psysh dan objek.

wget psysh.org/psysh
chmod +x psysh
./psysh
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Jika dengan apa -apa peluang anda terlupa kaedah mana yang ditakrifkan oleh kelas, anda kini mempunyai jawapannya. Pernahkah anda menggunakan antara muka baris arahan Linux OS atau Mac? Kemudian anda mungkin biasa dengan arahan LS. Ingat pilihan -la?

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Sweet, bukan?

kuasa sebenar psysh bersinar apabila diintegrasikan dengan aplikasi web, jadi mari kita bina satu.

Demo App

Saya akan melaksanakan aplikasi cepat untuk mempamerkan corak reka bentuk penghias. Rajah kelas UML corak sedemikian adalah seperti berikut:
Debug PHP Interaktif dengan Psysh

Jangan bimbang jika anda tidak tahu banyak tentang UML atau corak reka bentuk, pemahamannya tidak diperlukan untuk artikel ini.

Juga untuk projek ini, saya membuat satu set kes ujian. Kes -kes ujian itu boleh dijalankan oleh PHPUnit. Sekali lagi, anda tidak perlu mengenali ujian unit untuk memahami artikel ini.

Kod sumber lengkap untuk aplikasi kecil ini boleh didapati di https://github.com/sitePoint-examples/psysh

Pertama sekali, mari kita tentukan fail komposer.json kami untuk mengisytiharkan kebergantungan pada 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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

selepas komposer memasang, anda harus baik untuk pergi.

sila lihat kod sumber berikut dari fail awam/decorator.php. Ia akan meneliti objek SimpleWindow, DihiasiWindow, dan TitledWindow untuk mempamerkan corak penghias:

>>> 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_.*/
 >>>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

kita boleh melaksanakan kod melalui CLI PHP (antara muka baris perintah) atau melalui webserver jika seseorang dikonfigurasi. Kami juga boleh menggunakan pelayan web dalaman PHP.

Debugging dalam CLI

Pelaksanaan kod di atas melalui antara muka baris arahan akan kelihatan seperti ini:

<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
Salin selepas log masuk
Salin selepas log masuk

Bagaimana kita boleh berinteraksi dengan psysh? Hanya tambah psyshell :: debug (get_defined_vars ()); Di mana sahaja di kod di mana anda ingin menyahpepijat permohonan anda, biasanya di mana anda akan memasukkan pernyataan var_dump ():

>>> function say($a) {
...     echo $a;
... }
=> null
>>> say('hello');
hello
=> null
>>>
Salin selepas log masuk
Salin selepas log masuk

Selepas menyimpan fail, kami akan mendapat output berikut:

>>> 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"
>>>
Salin selepas log masuk
Salin selepas log masuk

Pelaksanaan skrip akan digantung, dan kami kini mempunyai petikan Psysh untuk dimainkan. Saya lulus get_defined_vars () sebagai parameter kepada psyshell :: debug () jadi saya mempunyai akses kepada semua pembolehubah yang ditetapkan di dalam shell:

>>> ls $foo
Class Methods: getA, setA
>>>
Salin selepas log masuk
Salin selepas log masuk

mari kita periksa pembolehubah tetingkap $:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

sesuatu yang bagus tentang mempunyai psysh di dalam aplikasi adalah bahawa kita boleh memeriksa kod sumber objek instantiated.

composer g require psy/psysh:~0.1
psysh
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

So, $ Window adalah contoh SimpleWindow, yang melaksanakan antara muka tetingkap ... Saya tertanya -tanya apa kod sumber untuk antara muka tetingkap kelihatan seperti ...

wget psysh.org/psysh
chmod +x psysh
./psysh
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kenapa SimpleWindow dan HiamedWindow mempunyai output yang sama? Mari kita periksa objek $ dihiasiWindow.

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Objek ini adalah "lebih berat" daripada SimpleWindow, jadi kod sumber mungkin panjang ... mari kita lihat kod sumber untuk kaedah render () sahaja:

>>> 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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kaedah getWindowReference () dipanggil, dan kemudian ia mengembalikan hasil dari kaedah render (). Mari kita periksa sumber 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_.*/
 >>>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kaedah ini mengembalikan harta WindowReference Object, dan seperti yang kita lihat dari perintah LS -AL di atas, ia adalah contoh acmepatternsdecoratorsimplewindow. Sudah tentu, kita hanya dapat melihat bagaimana DihiasiWindow :: __ membina () berfungsi, tetapi ini adalah cara lain yang dapat kita periksa.

Debugging dengan pelayan tertanam

Malangnya, debugging melalui webserver seperti Apache tidak disokong. Walau bagaimanapun, kami boleh debug aplikasi kami menggunakan pelayan tertanam PHP:

<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
Salin selepas log masuk
Salin selepas log masuk

Pelayan pembangunan kini mendengar sambungan pada port 8080, jadi sebaik sahaja kami meminta fail penghias.php melalui pelayan web ini (https: // localhost: 8080/decorator.php), kita harus melihat perkara berikut:

>>> function say($a) {
...     echo $a;
... }
=> null
>>> say('hello');
hello
=> null
>>>
Salin selepas log masuk
Salin selepas log masuk

kita boleh mula bermain dengan psysh sama seperti yang kita lakukan dengan 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"
>>>
Salin selepas log masuk
Salin selepas log masuk

Debugging dengan ujian unit

Sebagai pemaju yang baik, anda harus menulis ujian unit untuk kod anda sebagai bukti bahawa ia berfungsi seperti yang diharapkan. Dalam fail projek, anda akan menemui folder ujian, dan jika anda memasang PHPUnit, anda boleh menjalankan ujian di dalamnya.

>>> ls $foo
Class Methods: getA, setA
>>>
Salin selepas log masuk
Salin selepas log masuk

Walaupun kod itu kelihatan berjalan dengan sempurna, ujian gagal. Kita boleh meneliti lebih lanjut dengan menjalankan hanya ujian yang gagal:

>>> ls -la $foo
Class Properties:

  $a   "hello" 
  

Class Methods:

  getA   public function getA()
  setA   public function setA($a)
Salin selepas log masuk

Kami mempunyai ujian, fail dan garis di mana ralat dijana. Mari kita lihat di TitedWindowTest.php

{
    "name": "example/psysh",
    "authors": [
        {
            "name": "John Doe",
            "email": "john@doe.tst"
        }
    ],
    "require": {
        "psy/psysh": "~0.1"
    },
    "autoload": {
        "psr-4": {"Acme\": "src/"}
    }
}
Salin selepas log masuk

Jika anda tidak dikenali dengan phpunit, jangan terlalu banyak memberi perhatian kepada kod tersebut. Singkatnya, saya menubuhkan segala -galanya untuk menguji kaedah TitledWindow :: addtitle (), dan mengharapkan untuk menerima nilai yang tidak kosong.

Jadi, bagaimana kita menggunakan psysh untuk memeriksa apa yang sedang berlaku? Hanya tambahkan kaedah shell :: debug () seperti yang kita lakukan sebelum ini.

<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>
Salin selepas log masuk

Kami sudah bersedia untuk batu!

php public/decorator.php 

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

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

Titled Simple Window
+-------------+
|Title        |
+-------------+
|             |
|             |
|             |
|             |
|             |
+-------------+
Salin selepas log masuk

Jadi dalam $ RS kita harus mempunyai rentetan; Mari kita lihat apa yang kita ada.

<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>
Salin selepas log masuk

nilai null, tidak hairanlah ujian gagal ... mari kita periksa kod sumber TitledWindow :: addtitle (). Jika kita melakukan arahan LS, kita dapat melihat bahawa kita mempunyai kaedah objek yang tersedia melalui objek $ berjudulWindow.

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Terdapat pepijat. Kaedah ini menggema nilai dan bukannya mengembalikannya. Walaupun permohonan itu seolah -olah berfungsi dengan betul, melalui ujian unit dan psysh kami menemui kecacatan dan kini kami dapat memperbaikinya.

Kesimpulan

Artikel ini tidak dimaksudkan untuk menjadi lengkap dalam mempamerkan semua Psysh yang berpotensi. Terdapat ciri -ciri sejuk lain (seperti 'Doc') yang anda harus cuba. Psysh sahaja mungkin tidak begitu berguna, tetapi jika digabungkan dengan alat lain dan kuasa debugging anda yang bijak, ia dapat membuktikan menjadi aset yang berharga.

Soalan Lazim (Soalan Lazim) Mengenai Debugging PHP Interaktif Dengan Psysh

Apakah psysh dan bagaimanakah ia berfungsi dalam debugging php?

Psysh adalah konsol pemaju runtime, debugger interaktif, dan gelung baca-eval-print (REPH) untuk PHP. Ia menyediakan antara muka baris arahan interaktif di mana anda boleh melaksanakan kod PHP dan melihat output dengan segera. Psysh amat berguna untuk menyahpepijat kerana ia membolehkan anda melangkah melalui kod anda, memeriksa pembolehubah, dan perubahan ujian interaktif. Ia seperti mengadakan perbualan dengan kod anda, yang boleh membawa kepada pemahaman yang lebih baik dan resolusi pepijat yang lebih cepat. Alat Pengurusan Ketergantungan untuk PHP. Anda boleh memasangnya dengan menjalankan komposer komando Global memerlukan PSY/PSYSH. Selepas pemasangan, anda boleh memulakan Psysh dengan hanya menaip psysh di terminal anda. Pastikan untuk memasukkan binari komposer global di jalan anda supaya sistem anda dapat mencari psysh yang boleh dilaksanakan. , Anda boleh memasukkan psysh (); Pada bila -bila masa dalam kod anda di mana anda ingin memulakan sesi debugging interaktif. Apabila pelaksanaan kod anda mencapai titik ini, Psysh akan membuka shell interaktif, membolehkan anda memeriksa pembolehubah, melaksanakan kod, dan melangkah melalui pelaksanaan kod anda.

Ya, Psysh boleh sangat berguna untuk ujian unit dalam PHP. Anda boleh menggunakan PSYSH untuk mengamalkan ujian anda secara interaktif, memeriksa pembolehubah dan nyatakan pada bila -bila masa semasa pelaksanaan ujian. Ini amat berguna untuk memahami mengapa ujian gagal.

Bagaimana saya boleh menyesuaikan konfigurasi psysh? Direktori rumah. Dalam fail ini, anda boleh menetapkan pilihan konfigurasi seperti lalai termasuk, tahap ralat, dan saiz sejarah arahan. Anda juga boleh menambah arahan atau pembersih tersuai.

Apakah beberapa ciri canggih Psysh?

Psysh dilengkapi dengan banyak ciri canggih yang dapat membantu anda debug kod PHP anda dengan lebih berkesan. Ini termasuk pelaksanaan kod dengan runtime, penyisipan titik koma automatik, sokongan ruang nama, sokongan readline, pengendalian pengecualian, dan banyak lagi. Psysh juga menyokong penyempurnaan tab untuk pembolehubah, fungsi, kelas, dan juga kata kunci terbina dalam PHP. Apabila ralat atau pengecualian berlaku, Psysh akan memaparkan jejak timbunan terperinci, membantu anda memahami dengan tepat di mana dan mengapa ralat berlaku. Anda juga boleh menggunakan arahan WTF untuk memaparkan jejak tumpukan pengecualian terakhir pada bila -bila masa. termasuk Rangka Kerja Laravel, Symfony, dan Zend. Sesetengah rangka kerja, seperti Laravel, walaupun termasuk Psysh keluar dari kotak untuk perintah Tinker mereka. Anda boleh menyumbang kepada projek dengan melaporkan pepijat, mencadangkan ciri, atau mengemukakan permintaan tarik. Sebelum menyumbang, pastikan anda membaca garis panduan penyumbang projek. mengenai psysh. Mereka termasuk dokumentasi terperinci, contoh penggunaan, dan senarai arahan yang ada. Anda juga boleh mencari tutorial dan artikel di pelbagai blog PHP dan pemaju.

Atas ialah kandungan terperinci Debug PHP Interaktif dengan Psysh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan