PsySH 強大的 PHP REPL

PsySh 是一種 REPL (Read-Eval-Print Loop),可以接受使用者輸入,執行它們,並把結果回傳,省去了永無止境的 var_dump() and die(),可以完全取代 PHP interactive shell (php -a),而且還有很多方便的功能,可大大提升 debug 的效率。

PsySh 是 Laravel Tinker 的核心程式

安裝

composer g require psy/psysh:@stable

為了方便使用,可以把 composer bin 目錄加到 PATH - OS X: ~/.composer/vendor/bin - Windows: C:\Users\{USER}\AppData\Roaming\Composer\vendor\bin

安裝完輸入 psyshinstall.png

功能

輸入馬上回傳結果,省去 var_dump() echo 等動作: dump.png

快速寫一個類別,會自動判斷開始與結束: dump-2.png

Auto [tab] [tab] 自動完成: auto.png

快速查詢 PHP manual

這裡下載想要的語言 PHP 文件檔案 PHP-manual

丟到

doc.png

方法也可以: doc-2.png

中斷點除錯

像 Xdebug 一樣可以中斷點除錯,但省去一堆複雜的設定

假設這邊安裝:

composer require nesbot/carbon psy/psysh:@stable

再假設有一個檔案 index.php

<?php

require 'vendor/autoload.php';

use Carbon\Carbon;

$todos = [
    '吃飯',
    '睡覺',
    '打東東',
    '幹活',
];

$today = Carbon::today();

$tomorrow = Carbon::tomorrow();

eval(\Psy\sh()); 插入你想中斷的位置:

<?php

require 'vendor/autoload.php';

use Carbon\Carbon;

$todos = [
    '吃飯',
    '睡覺',
    '打東東',
    '幹活',
];

$today = Carbon::today();

eval(\Psy\sh()); // <---------------------- 假設插這

$tomorrow = Carbon::tomorrow();

可以 - php -S localhost:8000 然後開瀏覽器進入 - php index.php

碰到中斷點就會停住: breakpoint.png

可以 ls 指令,查看目前所使用的變數方法類別等: ls.png

查看 $todostodos.png

當然也可以使用 Carboncarbon.png

類別裡面也可以:

<?php

require 'vendor/autoload.php';

class Star
{
    protected $skill = '歐拉歐拉';

    public function attack()
    {
        echo $this->skill;

        eval(\Psy\sh()); // <---------------------- 這
    }
}

$star = new Star();
$star->attack();

star.png

總結

大概簡單介紹了一些用法,在對於測試簡單的程式碼應該會有不少幫助,或是快速查詢一下 function 的用法,大部分的功能也都可以在 Laravel Tinker 中實現,還有許多功能沒說到,詳細就參考 PsySh 拉!

References