A runtime developer console, interactive debugger and REPL for PHP.

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

PsySh 是 Laravel Tinker 的核心程式


安裝

1
composer g require psy/psysh:@stable

為了方便使用,可以把 composer bin 目錄加到 PATH

  • OS X: ~/.composer/vendor/bin
  • Windows: C:\Users\{USER}\AppData\Roaming\Composer\vendor\bin


安裝完輸入 psysh
install.png


功能

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


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


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


快速查詢 PHP manual

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

丟到
OS X: ~/.local/share/psysh/ or /usr/local/share/psysh/
Windows: C:\Users\{USER}\AppData\Roaming\PsySH\

1
2
3
// 可查看 Function, class, instance, constant, method, property 的文件

$ doc <target>

doc.png


方法也可以:
doc-2.png


中斷點除錯

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


假設這邊安裝:

1
composer require nesbot/carbon psy/psysh:@stable


再假設有一個檔案 index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

require 'vendor/autoload.php';

use Carbon\Carbon;

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

$today = Carbon::today();

$tomorrow = Carbon::tomorrow();


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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


查看 $todos
todos.png


當然也可以使用 Carbon
carbon.png


類別裡面也可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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