搜尋
首頁後端開發php教程互動php與psysh調試

互動php與psysh調試

是上午1:00,您的Web應用程序的交付截止日期為8小時……而且行不通。 當您嘗試弄清楚發生了什麼時,您將代碼填充var_dump()和die()到處都在查看錯誤在哪裡…

>

>你很生氣。每次您想嘗試返回值或變量分配時,都必須更改源代碼,執行應用程序並查看結果……最終,您不確定是否已將所有這些var_dump從代碼。這種情況很熟悉嗎?

>

鑰匙要點

    PSYSH是PHP的功能強大的REPL工具,可以通過允許立即進行互動和執行PHP代碼來增強調試,類似於瀏覽器中的JavaScript控制台。 PSYS的安裝可以在全球或使用Composer進行全球完成,並且支持在運行時檢查和操縱代碼的一系列命令。 > 通過使用``ls',show'''和`help'之類的命令,開發人員可以檢查變量,查看方法定義並直接在控制台中獲取有關代碼的詳細信息。
  • > PSYS可以直接集成到PHP腳本或單元測試中,以提供實時調試環境,這對於識別和修復複雜應用程序中的錯誤特別有用。
  • >該工具在命令行接口和內置的PHP Web服務器中提供了無縫調試體驗,儘管它與Apache等外部Web服務器不兼容。
  • >
  • > psysh進行救援
  • PSYSH是一個讀取的印刷循環(或repl)。 您可能在通過瀏覽器的JavaScript控制台之前使用了一個臥式。 如果有的話,您知道它具有很大的力量,並且在調試JS代碼時可能會很有用。
  • >談論PHP,您之前可能已經使用過PHP的Interactive Console(PHP -A)。在那裡,您可以編寫一些代碼,並且一旦按Enter:,該控制台將立即執行它
  • 不幸的是,交互式外殼不是一個替補,因為它缺少“ p”(打印)。 我必須執行迴聲語句才能查看$ a的內容。 在真實的補充中,我們將在將值分配給它後立即看到。
  • >
>您可以在Composer g需要的情況下在全球安裝PSYSH,或者下載PSYSH可執行

作曲家

>直接下載(Linux/Mac)

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
>此外,您可以在本文稍後看到的作曲家每個項目中都包含它。

現在讓我們玩一點psysh。

主要幫助將是您最好的朋友。這將為您提供各種命令及其解釋的原因:

>

composer g require psy/psysh:~0.1
psysh

基本上,一個替補可以做的是:

>
wget psysh.org/psysh
chmod +x psysh
./psysh

>請注意,如果我們將PSYS與PHP的交互式控制台進行比較,則PSYSH在分配後立即打印出$ A a值。

>

一個更複雜的示例可以如下:

php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >
>我定義了say()並調用它。 您看到的這兩個null是因為函數定義和執行都沒有返回值(函數迴盪值)。 此外,在定義功能時,提示從>>>更改為....

>

我們可以定義類並實例化嗎?

composer g require psy/psysh:~0.1
psysh
>當我實例化foo時,構造函數返回對對象的引用。 這就是為什麼Psysh打印。 現在讓我們看看關於psysh和對象的有趣的東西。

>

wget psysh.org/psysh
chmod +x psysh
./psysh
如果您忘記了類Foo定義的哪種方法,則您現在有了答案。 您是否使用過Linux OS或Mac命令行接口?那麼您可能會熟悉LS命令。 還記得-la選項嗎?

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
甜,不是嗎?

與Web應用程序集成時,PSYS的真實力量會閃耀,所以讓我們構建一個。

演示應用

>我將實施一個快速應用程序來展示裝飾器設計模式。這種模式的UML類圖如下:


>如果您對UML或設計模式不了解,則不必擔心本文不需要理解它們。 互動php與psysh調試

>也為此項目創建了一組測試用例。 這些測試用例可以由Phpunit運行。同樣,您不必熟悉單元測試就可以理解本文。

>

可以在https://github.com/sitepoint-examples/psysh

上找到此小應用程序的完整源代碼

首先,讓我們定義我們的composer.json文件以聲明對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
請查看來自文件public/decorator.php的以下源代碼。它將實例化簡單的窗口,裝飾窗戶和標題為窗戶的對象,以展示裝飾器圖案:

我們可以通過PHP的CLI(命令行接口)執行代碼,或者如果配置了網絡服務器。 我們也可以使用PHP的內部Web服務器。

>
>>> 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_.*/
 >>>
在CLI

中調試 通過命令行界面執行上述代碼的執行方式將如下所示:

>

>我們如何與psysh互動? 只需添加psyshell :: debug(get_defined_vars());您要調試應用程序的代碼上的任何位置,通常在哪裡插入var_dump()語句:

>

<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
保存文件後,我們將獲得以下輸出:>

>腳本的執行將被暫停,我們現在有PSYS的提示可以進行。我將get_defined_vars()作為參數傳遞給psyshell :: debug(),所以我可以訪問shell中的所有定義變量:
>>> function say($a) {
...     echo $a;
... }
=> null
>>> say('hello');
hello
=> null
>>>
>

讓我們檢查$ window變量:
php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >

在應用程序中將psys添加到一個很好的是,我們可以檢查實例化對象的源代碼。 >

composer g require psy/psysh:~0.1
psysh
so,$ window是SimpleWindow的一個實例,它實現了窗口界面……我想知道窗口界面的源代碼看起來像…

>

wget psysh.org/psysh
chmod +x psysh
./psysh
>為什麼簡單的窗口和裝飾窗口具有相同的輸出?讓我們檢查一下$ DecoratedWindow對象。

>

./psysh                                                                                                                                             

Psy Shell v0.1.11 (PHP 5.5.8 — cli) by Justin Hileman                                                                                                                                                                              
>>>
這個對像比簡單的窗口“重”,因此源代碼可能很長……讓我們僅查看render()方法的源代碼:

>

調用getWindowReference()方法,然後返回Render()方法的結果。 讓我們檢查getWindowReference()來源:
>>> 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
>

此方法正在返回對象的WindowReference屬性,正如我們從上面的LS -AL命令看到的那樣,它是Acmepatternsdecoratorsimplewindow的實例。 當然,我們本來可以研究DecoratedWindow :: __ construct()的工作方式,但這是我們可以檢查的另一種方式。
>>> 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_.*/
 >>>
用嵌入式服務器調試

不幸的是,不支持通過像Apache這樣的Web服務器進行調試。但是,我們可以使用PHP的嵌入式服務器調試應用程序:

開發服務器現在正在聆聽端口8080上的連接,因此,一旦我們通過此Web服務器(https:// localhost:8080/decorator.php)請求Decorator.php文件,我們就應該看到以下內容:

我們可以像我們對Cli
<span>>>> $a = 'hello';
</span><span>=> "hello"
</span><span>>>></span>
>一樣開始玩PSYSH

進行單位測試調試
>>> function say($a) {
...     echo $a;
... }
=> null
>>> say('hello');
hello
=> null
>>>

作為一個好的開發人員,您應該為代碼編寫單元測試,以證明其正常工作。在項目的文件中,您會找到測試文件夾,如果安裝了PHPUNIT,則可以在其內部運行測試。

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

即使代碼似乎完美地運行,測試也會失敗。我們可以通過僅運行失敗測試來進一步檢查:

>我們具有生成錯誤的測試,文件和行。 讓我們看一下標題為windowtest.php
>>> ls $foo
Class Methods: getA, setA
>>>

如果您不熟悉phpunit,請不要過分關注該代碼。 簡而言之,我正在設置所有內容,以測試標題window :: addtitle()方法,並期望收到一個非空價值。
>>> ls -la $foo
Class Properties:

  $a   "hello" 
  

Class Methods:

  getA   public function getA()
  setA   public function setA($a)

>那麼,我們如何使用psysh檢查發生了什麼?只需像以前一樣添加shell :: debug()方法。

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

我們準備好搖滾了!

>因此,在$ rs中,我們應該有一個字符串;讓我們看看我們真正擁有的。
<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>

> null值,難怪測試失敗了……讓我們檢查標題Window :: AddTitle()的源代碼。 如果我們執行LS命令,我們可以看到我們可以通過$ titledwindow對象獲得該對象的方法。
php public/decorator.php 

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

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

Titled Simple Window
+-------------+
|Title        |
+-------------+
|             |
|             |
|             |
|             |
|             |
+-------------+
php -a
Interactive shell

php > $a = 'Hello world!';
php > echo $a;
Hello world!
php >

有錯誤。該方法是迴盪值而不是返回值。 即使該應用程序似乎可以正常工作,通過單元測試和PSYSH,我們發現了一個缺陷,現在我們可以修復它。

>

結論

本文並不是要詳盡地展示所有潛在的PSYS所具有的。 您應該嘗試其他一些很酷的功能(例如“ doc”)。 僅PSYS可能不是很有用,但是如果與其他工具和您的聰明調試功能相結合,則可以證明是寶貴的資產。

>常見問題(常見問題解答)關於與psysh

進行交互式PHP調試

什麼是psysh,它如何在PHP調試中起作用?它提供了一個交互式命令行接口,您可以在其中執行PHP代碼並立即查看輸出。 PSYS對於調試特別有用,因為它允許您逐步瀏覽代碼,檢查變量並進行交互式測試更改。這就像與您的代碼進行對話一樣,這可能會導致更好地理解和更快的錯誤分辨率。

>如何安裝PSYSH進行php調試?

psysh可以使用作曲家,A PHP的依賴關係管理工具。您可以通過運行Command Composer Global需要PSY/PSYS進行安裝。安裝後,您可以簡單地在終端中鍵入psysh來啟動PSYS。確保將全局作曲家二進製文件包括在您的路徑中,以便您的系統可以找到PSYSH可執行文件。

>我如何使用psysh調試我的php代碼?

,您可以插入psysh();在您的代碼中的任何時候,您都想開始交互式調試會話。當您的代碼執行達到這一點時,PSYS將打開一個交互式外殼,允許您檢查變量,執行代碼並逐步瀏覽您的代碼執行。

>

我可以使用psysh在PHP中進行單位測試?是的,PSYSH對於PHP中的單位測試非常有用。您可以使用PSYS在測試執行過程中的任何時刻進行交互調試,檢查變量和狀態。這對於理解為什麼測試失敗可能特別有用。

>

我如何自定義PSYSH配置?

psysh允許您通過在您的.psysh.php中創建.psysh.php文件來自定義其配置。主目錄。在此文件中,您可以設置配置選項,例如默認值包括,錯誤級別和命令歷史記錄大小。您還可以添加自定義命令或清潔劑。

>

psysh的一些高級功能是什麼?

psysh具有許多高級功能,可以幫助您更有效地調試PHP代碼。其中包括使用運行時執行代碼,自動分號插入,名稱空間支持,讀取線支持,異常處理等。 PSYS還支持變量,功能,類,甚至PHP內置關鍵字的選項卡完成。

psysh如何處理錯誤和異常?

psysh具有強大的錯誤和異常處理機制。當發生錯誤或異常時,PSYSH將顯示詳細的堆棧跟踪,幫助您確切地了解錯誤發生的位置和原因。您還可以在任何時候使用WTF命令來顯示最後一個異常堆棧跟踪。

>我可以將psysh與我喜歡的php框架一起使用嗎?

是的,PSYSH可以很好地與大多數PHP框架,大多數PHP框架,包括Laravel,Symfony和Zend框架。一些框架,例如Laravel,甚至包括PSYSH開箱即用。您可以通過報告錯誤,建議功能或提交拉力請求來為該項目做出貢獻。在貢獻之前,請確保閱讀該項目的貢獻指南。

>

>我在哪裡可以找到更多資源來了解PSYSH?

>

>官方PSYS網站及其GitHub存儲庫是找到資源的最佳場所關於psysh。它們包括詳細的文檔,用法示例和可用命令列表。您還可以在各種PHP和開發人員博客上找到教程和文章。

>

以上是互動php與psysh調試的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在Laravel中使用Flash會話數據在Laravel中使用Flash會話數據Mar 12, 2025 pm 05:08 PM

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

構建具有Laravel後端的React應用程序:第2部分,React構建具有Laravel後端的React應用程序:第2部分,ReactMar 04, 2025 am 09:33 AM

這是有關用Laravel後端構建React應用程序的系列的第二個也是最後一部分。在該系列的第一部分中,我們使用Laravel為基本的產品上市應用程序創建了一個RESTFUL API。在本教程中,我們將成為開發人員

php中的捲曲:如何在REST API中使用PHP捲曲擴展php中的捲曲:如何在REST API中使用PHP捲曲擴展Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

簡化的HTTP響應在Laravel測試中模擬了簡化的HTTP響應在Laravel測試中模擬了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12個最佳PHP聊天腳本在Codecanyon上的12個最佳PHP聊天腳本Mar 13, 2025 pm 12:08 PM

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

Laravel中的通知Laravel中的通知Mar 04, 2025 am 09:22 AM

在本文中,我們將在Laravel Web框架中探索通知系統。 Laravel中的通知系統使您可以通過不同渠道向用戶發送通知。今天,我們將討論您如何發送通知OV

解釋PHP中晚期靜態結合的概念。解釋PHP中晚期靜態結合的概念。Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

PHP記錄:PHP日誌分析的最佳實踐PHP記錄:PHP日誌分析的最佳實踐Mar 10, 2025 pm 02:32 PM

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)