如何在 PhpStorm 使用 Code Generation?
2021-06-06 19:05
标签:mit 命名方式 oom tin lan htm comment 需要 type 實務上開發專案時,有一些程式碼會不斷的出現,這時可靠 PhpStorm 的 Code Generation 幫我們產生這些 code snippet,除此之外,我們也可以將自己的 code snippet 加入 Live Template,可加快發開速度,並減少 typo。 PHP 7.0.8 Laravel 5 的 Code Generation 自動幫我們 將滑鼠游標放在反白的 PostRepository.php1 1GitHub Commit : PostRepository 自動 use namespace Code Generation 自動幫我們 實務上我們常常只會維護程式碼,但不會去維護 namespace,造成沒用到的 namespace 越來越多。 如我們將 PostRepository.php2 2GitHub Commit : PostRepository 自動刪除沒用的 namespace 按熱鍵 ? + ? + O,PhpStorm 會自動幫你將沒用到的 namespace 刪除。 使用依賴注入後,必須建立 constructor 並注入相依物件,在每天的開發過程中需要不斷發生,Code Generation 可以幫我們自動完成 constructor injection。 按熱鍵 ? + N,出現 在 constructor 參數列輸入要依賴注入的 class 名稱,輸入前幾個字母即可,Code Completion 會啟動讓你挑選 class 名稱。 Code Generation 自動幫我們 輸入 Code Inspection 會出現警告,因為還沒產生 constructor 的 PHPDoc。 按熱鍵 ? + ?,選擇 PhpStorm 自動幫我們產生 PHPDoc。 繼續按熱鍵 ? + ?,選擇 選擇要由 Code Generation 要產生 field 的程式碼。 PostService.php3 3GitHub Commit : 新增 PostService Code Generation 一氣呵成幫我們產生了 field,在 constructor 產生了指定 field 相對應的程式碼,另外也 實務上常常需要對 private field 加上 getter 與 setter,如重構的 Self Encapculate Field 也會用到,Code Generation 可以幫我們自動產生 getter 與 setter。 新建立一個 PostService.php4 4GitHub Commit : 支援 PHP 7 type hint 與 return type 的 getter 與 setter 若選擇 PostService.php5 5GitHub Commit : 支援 fluent setter 若選擇 在物件導向中,實踐抽象化最重要的就是 interface,所以常常有 implement interface 的需求,Code Generation 提供兩種方式讓我們快速實作 interface。 SMSInterface.php6 6GitHub Commit : 新增 SMSInterface 定義了 建立了 按熱鍵 ? + ?,選擇 Code Generation 會自動幫我們根據 interface 產生了 method 框架,連 PHPDoc 也會幫我們產生。 另外一種方式,按熱鍵 ? + I,出現 AzureSMSService.php7 7GitHub Commit : 自動實現 interface 的 method 繼承是實現物件導向抽象化的另一種方式,當子類別可 override 父類別的 method。 若我們想 override 父類別 AzurePostService.php7 7GitHub Commit : 自動複寫 class 的 method Code Generation 會自動幫我們根據父類別產生 method 框架,連 PHPDoc 也會幫我們產生。 很羨慕 fluent API 的好用嗎? Postfix Completion 讓我們可以類似 fluent API 的方式寫 PHP。 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 PhpStorm -> Preferences -> Editor -> General -> Postfix Completion 在 Preferences 設定底下,可以看到所有 PhpStorm 支援的 Postfix Completion,包含 JavaScript 與 PHP。 可惜 Postfix Completion 無法擴充,就只能用 PhpStorm 所提供的 postfix。 除了 Postfix Completion 外,PhpStorm 另外提供 Live Template,這是可以自行擴充的。 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 輸入 Code Generation 會自動幫我們產生 PhpStorm -> Preferences -> Editor -> Live Templates 在 Preferences 設定底下,可以看到所有 PhpStorm 支援的 Live Template,還包含各種其通語言,甚至包含 Angular 2。 你也可以自己將常用的 code snippet,存成自己的 Live Template。 如在寫單元測試時, 選擇你的 code snippet,Tools-> Save as Live Template。 輸入你自己的想要的縮寫,並在滑鼠游標停止處加上 輸入 Code Generation 會自動幫我們產生 完整的範例可以在我的 GitHub 上找到。 PhpStorm Online Help, Generating Code 如何在 PhpStorm 使用 Code Generation? 标签:mit 命名方式 oom tin lan htm comment 需要 type 原文地址:http://www.cnblogs.com/meetrice/p/7337995.htmlVersion
Laravel 5.2.41
PhpStorm 2016.2Namespace
app
目錄下都遵循 PSR-4,也就是每個在 app
目錄下的 class 都要有 namespace,且 Laravel 與 package 都有自己的 namespace,實務上我們不可能記得了這麼長的 namespace,Code Generation 可以幫我們自動引入相對應的 namespace,若 namespace 名稱相同,會讓我們用選的。return
type 為 Collection
,這是 Laravel 擴充的型別,輸入 Col
之後,Code Completion 會顯示 Collection
,後面為其完整的 namespace。use
了正確的 namespace,不用我們操心。Post
出現反白,Code Inspection 抱怨找不到 Post
class。Post
上,按熱鍵 ? + ?,選擇 Import class
。use
了 model 的 namespace,不用我們操心。return Post::all()
刪除後,因為沒使用到 Post
,所以在 PhpStorm 的 use App\Post
會反灰警告你此 namspace 目前沒人使用。Constructor
Generate
選單,選擇 Constructor...
。use
了 PostRepository
的 namespace。$
,Code Completion 會自動顯示建議的參數名稱,選擇你喜歡的命名方式。Update PHPDoc Comment
,由 PhpStorm 來幫我們產生 PHPDoc。Initialize fields
,由 PhpStorm 來幫我們產生其他程式碼。use
相對應的 namespace。Getter/Setter
$postId
field,按熱鍵 ? + ?,會出現各種 getter 與 setter 產生方式。Add getter and setter
,Code Generation 會幫我們自動產生支援 PHP 7 type hint 與 return type 的 getter 與 setter。Add fluent setter
,Code Generation 甚至會幫我們自動產生 fluent 風格的 setter。Implement Method
SMSInterface
,準備對簡訊的發送加以抽象化。AzureSMSService
,實作 SMSInterface
,Code Inspection 馬上提出 尚未實作 SMSInterface
警告。Add method stubs
。Choose methods to implement
視窗,選擇你要 implement 的 method。Override Method
AzurePostService
繼承了 PostService
。PostService
的 showTitle()
,可按熱鍵 ? + O,出現 Choose method to override
視窗,選擇你要 override 的 method。Postfix Completion
not
$title.not
,按熱鍵 ?。!
區塊。par
$title.par
,按熱鍵 ?。( )
區塊。if
$title.if
,按熱鍵 ?。if ( )
區塊。else
$title.else
,按熱鍵 ?。if (! )
區塊。fe
$title.fe
,按熱鍵 ?。foreach( )
區塊。null
$title.null
,按熱鍵 ?。if ( === null)
區塊。nn
$title.nn
,按熱鍵 ?。if ( !== null)
區塊。return
$title.return
,按熱鍵 ?。return
。echo
$title.echo
,按熱鍵 ?。echo $title;
。var_dump
$title.var_dump
,按熱鍵 ?。var_dump()
。Live Template
fore
fore
,按熱鍵 ?。foreach( )
區塊。forek
forek
,按熱鍵 ?。foreach( )
區塊,並包含 key 與 value。thr
thr
,按熱鍵 ?。throw new
區塊。prif
prif
,按熱鍵 ?。private function
區塊。prof
prof
,按熱鍵 ?。protected function
區塊。pubf
pubf
,按熱鍵 ?。public function
區塊。自訂 Live Template
$this->assertEquals()
常常使用,所以我們想將它存成 Live Template。$END$
,將來 PhpStorm 會將游標停在此方便你輸入。pubf
,按熱鍵 ?。$this->assertEquals()
,並將游標放在 ( )
中,方便你後續輸入。Conclusion
Sample Code
Reference
PhpStorm Online Help, Using Postfix Template
PhpStorm Online Help, Live Template
文章标题:如何在 PhpStorm 使用 Code Generation?
文章链接:http://soscw.com/essay/91403.html