如何在 PhpStorm 中高效:一個真正重要的 IDE

已發表: 2022-03-11

成為一名優秀的軟件開發人員意味著什麼?

首先,它需要對您所從事的特定技術堆棧有深入的了解。如果您是 LAMP 開發人員,那麼您無疑需要成為 PHP 和 MySQL 方面的專家,了解現代框架,並在 Linux 管理方面擁有一些不錯的技能。

其次,同樣重要的是,您需要了解您每天在工作流程中使用的補充工具。

您需要能夠與版本控制系統、持續集成工具、虛擬機管理服務(如 Vagrant)以及顯然您的集成開發環境 (IDE) 一起正常工作。

本文介紹了流行的、強大的 IntelliJ IDEA IDE PhpStorm,以及如何通過一點點努力輕鬆地提高效率,甚至在編碼時防止錯誤。

用鍵盤快捷鍵訓練自己

讓我們從對任何 IDE 來說最簡單、或許也是最重要的技能開始:正確使用鍵盤。

如果你比較一個經驗豐富的程序員和一個普通的 PC 用戶,你會注意到的第一件事是程序員幾乎把所有的時間都花在了鍵盤上,幾乎沒有碰過鼠標。 這是有原因的:它更有效。

首先,成為一名優秀的打字員

雖然打字與 IDE 技能沒有直接關係,但如果您需要盯著鍵盤查找每一個鍵,則快捷鍵是無用的。

如果您還沒有每分鐘至少輸入 50 個單詞 (WPM),請查找打字培訓網站,例如 TypingClub.com,並提高您的速度。

還有一些有競爭力的打字網站,例如 TypingRaces.com,您可以在其中與其他人進行打字比賽。 我的推薦? 參加比賽作為每天早上的熱身。

訓練自己使用 PhpStorm 的快捷方式

最快的學習方法是不要給自己提供鍵盤快捷鍵的替代方案。

當我學習快捷方式時,我關閉了所有菜單、選項卡、導航欄等。你也可以通過導航到查看菜單並取消選中所有標記來做到這一點(你可能想離開“狀態欄”):

取消選中 PhpStorm 中的視圖菜單項。

我的 IDE 現在看起來像這樣:

準系統 IDE。
如您所見,即使我想,我也無法避免使用快捷方式。

我花了大約三四天的時間來度過筆記本電腦粉碎的調整階段。

如果您發現自己的動力不足,PhpStorm 有一個內置的生產力指南。 它包含功能列表和每個功能的使用統計信息。 只需單擊“幫助”,然後單擊“生產力指南”,您就會看到如下內容:

生產力菜單

如您所見,快捷方式使我免於輸入超過 20,000 個額外字符(在六個月的過程中)並防止了大約 1,000 個錯誤。 很勵志!

它還告訴我哪些功能我不經常使用,確定我可以提高我的快捷技能的地方。 查看您的統計數據,並明智地使用這些知識。

頂級鍵盤快捷鍵

Jetbrains 提供了一個方便的 PDF,其中包含其官方文檔中列出的所有可用快捷鍵,此外還有一個“您不能錯過的鍵盤快捷鍵”列表。 立即開始學習這一點,直到你能在睡夢中做到這一點。

到目前為止,我最喜歡的快捷方式是:

  • Ctrl+ E - 在最近使用的文件之間切換
  • Ctrl + / - 註釋/取消註釋代碼塊
  • Ctrl + B - 轉到類聲明
  • Ctrl + N - 導航到班級
  • Ctrl + R - 搜索和替換
  • Ctrl +Alt + L - 重新格式化代碼
  • Alt + Enter - 顯示意圖操作和快速修復
  • Ctrl + Shift + Enter - 完成語句

其中一些是不言自明的,其他的可以使用更多的覆蓋範圍。

使用 Ctrl + E 和 Enter 切換文件

想像一下,您需要經常在兩個文件之間切換,例如,在具有應用程序業務邏輯的 PHP 類和用於呈現和輸出它的模板之間切換。

許多開發人員會從鍵盤切換到鼠標,導航到包含文件的選項卡,單擊它,然後使用滾輪找到所需的部分。 問題:它非常慢!

按Ctrl+E然後回車不是更好嗎?

Ctrl+E 將顯示最近使用的文件列表,如果您立即按 Enter,您將切換到當前文件之前使用的文件。

您可以使用 ctrl+e 在文件之間切換。

如果您想返回,只需再次按下相同的序列即可。

使用 ctrl+e 在文件之間切換。

這是在兩個文件之間切換的最快方式,只需三個按鍵! 想像一下,當您每天必須這樣做數百次時,您將節省多少時間。

使用 Alt+Enter 顯示意圖操作和快速修復

任何現代 IDE 都會突出顯示錯誤並提供一些代碼改進建議。 如果您將光標移動到任何不完整或未記錄的代碼片段,您將看到一個燈泡圖標,如果您單擊它,您將看到一個包含可能操作的彈出菜單。

同樣的操作可以通過按Alt+Enter來完成,這樣更方便。

Alt+Enter 向您顯示意圖操作和快速修復。

在上面的屏幕截圖中,PhpStorm 提供了兩個選項:向函數添加 PHPDoc 規範(這是一個非常好的建議,請繼續關注),並刪除未使用的參數。

相同的快捷方式可用於許多其他常見操作:為類屬性創建 getter 和 setter、初始化構造函數中的字段、添加未定義的方法和屬性等。

使用 Ctrl+Shift+Enter 完成語句

這個快捷方式非常簡單,同時也非常有用,完全按照它所說的去做。

例如,如果您鍵入$i = 0 ,然後在其後立即按Ctrl+Shift+Enter ,PhpStorm 將在您的表達式中添加一個分號。 如果您鍵入if和它後面的快捷方式,PhpStorm 將添加括號,依此類推。

盡可能頻繁地使用此快捷方式。 由於所有代碼都由標準結構組成,它將為您節省大量時間。 編寫結構的任何速度提高都會使編寫代碼的速度也快得多!

IdeaVim 插件

使用快捷方式可以大大提高您的工作效率,但如果這對您來說還不夠,下一個級別是 IdeaVim 插件。

您可能知道,Vim 是 Linux 極客和 devops 工程師廣泛使用的控制台文本編輯器,用於通過命令行管理遠程服務器。

Vim 有兩個重要的特性。

首先,學習難。 其次,如果你了解它,它就會得到回報。 您在文本編輯方面的工作效率將比任何GUI 編輯器都要好得多。 在你的職業生涯中也會出現一些情況,你別無選擇,只能使用控制台編輯器,比如 Vim,(例如,如果你需要在遠程 Web 服務器上修復某些東西,而你只能通過控制台訪問它)。

但是 Vim 與 PhpStorm 有什麼關係呢?

嗯,許多開發人員希望將 Vim 的效率與現代 IDE 的特性(例如代碼完成、類搜索、高級搜索和導航)結合起來。 為此創建了 IdeaVim 插件。

重要提示:從這裡開始,我假設您了解 Vim 的基礎知識。 如果你不這樣做,你可以開始使用帶有 vimtutor 的 Vim,它在幾乎所有 Linux 發行版或 openvim 中都可以訪問。

插件安裝

1.導航到“文件”,然後是“設置”,然後是“插件”,然後在插件搜索框中輸入 IdeaVim。 標記插件名稱右側的複選框,然後單擊“應用”。 2.重啟 PhpStorm。 3.通過檢查'Tools'然後'Vim Emulator'打開插件

通過工具菜單啟用 Vim 模擬器。

4.原始的 PhpStorm 快捷方式和 Vim 快捷方式(由插件啟用)可能會相互衝突,因此您需要手動解決這些衝突。 導航到“文件”、“設置”、“其他設置”,然後是“Vim 仿真”。 您將看到有衝突的快捷方式列表。 在此列表中,您可以選擇是使用 PhpStorm 快捷鍵還是綁定到該鍵序列的 Vim 快捷鍵。 您可以在下面的屏幕截圖中看到我當前的選擇。 如果你無法做出決定,就留下一個未定義的快捷方式; PhpStorm 會在你第一次使用時要求你選擇。

PhpStorm 和 Vim Emulator 之間會有一些快捷方式衝突,但您可以選擇使用哪個。

插件使用

打開插件後,您會立即註意到編輯區域變得類似於 Vim:

  • 光標改變了它的形式,變成了矩形,就像在 Vim 中一樣。
  • 如果您嘗試在編輯器中輸入內容,則不會發生任何事情。

從這一點開始,您可以像在 Vim 中一樣開始編輯文件,使用hjkl鍵進行導航,使用i鍵在普通模式和插入模式之間切換等。

該插件支持幾乎所有 Vim 快捷方式。

同時,所有 IDE 功能仍然存在,因此您可以非常快速地編輯文本,只使用鍵盤(如在 Vim 中),並且仍然在類、文件、用法和定義之間跳轉(如在 PhpStorm 現代工作流程中)。

高級搜索

與普通文本編輯器相比,任何 IDE 的最大優勢之一是能夠實現高級搜索。

如果您只處理過小型項目,這似乎是多餘的,但是當您開始處理大型代碼庫以及類之間複雜的 OOP 關係時,您就會明白它是多麼不可或缺。

通過常用搜索 ( Ctrl + F ) 或搜索替換 ( Ctrl + R ) 很容易在文件中找到特定字符串,但是如果您需要在數千個文件中查找特定類的定義怎麼辦? 或者,如果您想在包含數千行代碼的類中查找特定方法? 或者,也許您想從檢索結果中排除所有評論? 這就是像 PhpStorm 這樣的現代 IDE 提供幫助的地方。

在本節中,我將向您展示 PhpStorm 中最有用的搜索變體。

在路徑中查找

在普通搜索之後,最簡單的搜索是在項目的某個子文件夾中的所有文件中搜索特定字符串。 它在 PhpStorm 中很容易實現,以至於我使用它的頻率比任何其他搜索選項都高。

例如,在我的示例應用中搜索類User的用法。

1.Ctrl + Shift + F 。 您將看到一個帶有搜索選項的彈出窗口。 在查詢字符串中鍵入“ User ”。 您將在“預覽”選項卡中看到許多結果:

一個基本的 ctrl+shift+f 搜索。

2.現在,我們可以切換到預覽選項卡,並在那里手動查找所需的結果,但我們有超過 100 個匹配項。 乏味! 讓我們更具體一點。

首先,我們正在搜索類的用法,所以讓我們檢查一下“whole words only”選項。 它將幫助我們避免像E_USER_ERROR這樣的結果。

接下來,讓我們排除在註釋和字符串文字中的搜索,並僅通過.php文件限制我們的結果。

有時指定項目的更具體的子文件夾也很有意義。 在這種情況下,所有項目特定的代碼都位於app文件夾中。

因此,讓我們將範圍目錄更改為example-app/app

現在,我們有一個像這樣的搜索窗口:

路徑搜索中更精細的查找。

只是通過更具體的搜索參數,我們將結果數量從數百個減少到只有 24 個!

現在,很容易手動檢查它們中的每一個。 此外,我們甚至不需要單獨打開每個文件,因為我們有一個非常方便的預覽選項卡:

在路徑搜索結果預覽選項卡中查找。

在日常實踐中,路徑搜索中的查找涵蓋了我進行的所有搜索的大約 80%。 它非常有用,即使您不使用其他任何東西進行檢索,您仍然會非常高效。

前往聲明

PhpStorm(與所有現代 IDE 一樣)的另一個極其重要的能力是在類和函數的用法和聲明之間跳轉。

假設我們有一個函數,它創建一個新的User 。 顯然,我們不會記住User類的所有方法和屬性,因此我們需要檢查類的聲明來決定如何執行所有需要的操作。 有幾種方法可以做到這一點。

首先,您可以將類聲明作為快速只讀彈出窗口打開。

只需將光標移動到任何類用法並按Ctrl + Shift + I 。 將出現只讀窗口:

使用 Ctrl+shift+I 獲得只讀預覽。

您可以檢查所有必要的數據,然後返回到初始文件。 它非常快; 你甚至不需要在文件之間切換!

但是,正如我所提到的,彈出窗口是只讀的,因此如果您決定在檢查User類時更改某些內容,您將需要另一個快捷方式: Ctrl + Shift + B

這會將您直接導航到課程。 當您進行更改時,您可以使用我們之前介紹的Ctrl + E, Enter序列輕鬆返回到初始文件。

列出當前類的所有方法

我每天使用的搜索功能的最後一個變體是“按類結構搜索”。 有時 PHP 類很長,很難找到特定的屬性或方法。

如果在類文件打開時按Ctrl + F12 ,您將看到一個帶有類結構的彈出窗口:

按下 ctrl+f12 將打開一個帶有打開的類文件的文件結構的彈出窗口。

如果您開始輸入方法名稱,您將只看到與您輸入的模式匹配的方法:

如果您開始輸入方法名稱,例如“get”,您只會在 ctrl+f12 彈出窗口中看到匹配的方法。

試想一下,您有大約 100 個方法(這不是一個好習慣,但您可能會遇到這樣的代碼),並且您需要經常在其中兩個之間切換。 用普通的搜索就能讓你發瘋!

通過使用文件結構搜索,每個開關將需要大約五次擊鍵。 只需輸入Ctrl + F12 ,開始輸入所需方法的名稱,然後按Enter ,您就會看到它的聲明。

順便說一句, Ctrl + F12不是一個方便的快捷方式,因此您可能需要考慮將其更改為其他內容。 就個人而言,我使用Alt + R

PhpStorm 中的搜索方法還有很多,但這三種幾乎可以涵蓋所有日常搜索任務。

搜索功能回顧

  • 如果您需要搜索在多個文件中找到的內容,請使用路徑搜索中的查找 ( Ctrl + Shift + F ),並嘗試使搜索選項(過濾)盡可能具體。
  • 如果您需要快速查看類或方法的來源,請使用Ctrl + Shift + I並通過快速彈出窗口檢查它(如果您需要編輯它,請通過Ctrl + Shift + B導航到聲明)。
  • 如果您有一個大型類並且需要檢查其結構或在方法之間快速切換,請使用文件結構快捷方式,默認情況下為Ctrl + F12

所有基本語言結構的實時模板用法

雖然快捷方式允許您快速編寫和導航代碼,但還有一種方法可以進一步改進它——自動完成和實時模板。

基本的自動補全非常簡單,您當然應該知道它。

如果您開始鍵入類、方法或變量的名稱,任何好的 IDE 都會向您顯示可能的結尾列表。 您可以選擇其中任何一個,並避免輸入到最後。

基本的自動完成。

也就是說,您可以使用實時模板走得更遠。

在本節中,您將了解我在日常工作中使用的實時模板。 我將它們分為三組:基本語言結構、長名稱函數和 HTML 塊。

基本語言結構

不用說,開發人員每天多次if標準語言結構,例如whileforforeach ,因此每次從頭開始鍵入它們的效率極低。 這就是為什麼在 PhpStorm 中有內置的實時模板。

對於一些改變生活的直播模板魔法,打開 PhpStorm,在編輯區輸入forek ,然後Enter 。 你會看到這個:

'fork' 實時模板。

PhpStorm 用完整的foreach循環替換了一個模板,並為所有必要的變量準備了存根。 您只需要填寫正確的變量名。

如果您按Ctrl + J ,您將看到當前支持的實時模板列表,適用於代碼的當前位置。 您可以選擇其中任何一個。

Ctrl+j 調出實時模板列表。

您可能已經註意到,這裡缺少一些非常常見的結構。 例如,我總是想念while循環的實時模板,所以讓我們創建它吧!

導航到“設置”,然後是“編輯器”,然後是“實時模板”,選擇“PHP”,然後單擊彈出窗口右上角的綠色“+”:

您可以通過依次轉到“設置”、“編輯器”和“實時模板”來添加新模板。

用“wh”填寫“縮寫”字段,用“while(bool_expr){…}”填寫“描述”字段。 “模板文本”字段應具有以下內容:

 while($EXPR$) { $END$ }

單擊“模板文本”文本區域下方的“定義”鏈接,然後從列表中選擇“PHP”,這樣它就知道在什​​麼上下文中使用該模板。

現在,讓我們討論一下它是如何工作的。

當您在編輯區域wh, Enter時,它將被模板文本替換。

光標將移動到第一個模板變量,在我們的例子中是$EXPR$ ,然後您可以輸入任何表達式(例如$i > 0 )並再次按Enter

之後,光標將移動到下一個變量(本例中只有一個),依此類推。 $END$是一個特殊變量,表示在填充所有變量後光標應該移動的位置。

我們只有一個變量,所以在我們填充$EXPR$後它會立即移動到$END$ ,我們將準備好輸入一個循環體。

為您經常使用的所有語言結構創建自己的實時模板。 預先投入一些時間比每天花時間從頭開始輸入這樣的結構要好得多。

PHP 函數

不幸的是,PHP 以函數名稱冗長且不一致的語言著稱。

好消息是您可以使用實時模板將它們替換為簡短的縮寫。 例如,如果要正確檢查數組中是否存在某個鍵,則需要調用函數array_key_exists($my_key, $my_array)

即使使用標準的自動完成功能,每次都輸入它也非常乏味,因此只需為所有此類情況創建實時模板。

就個人而言,我更喜歡 array_key_exists 的 'ake',你可以選擇任何其他。 以下是創建“ake”實時模板的方法:

作者的array_key_exists 模板截圖。

HTML 塊

最後,但肯定不是最不流行的實時模板用法是處理 HTML 塊。

如果您還沒有使用實時模板,我敢打賭,您一直在做很多乏味的(而且基本上是無用的)工作,創建標準的 HTML 標記元素。 實時模板通過我們上面所做的改變了這一點,但“模板文本”字段是您的 HTML。

使用 PHPDocs 避免錯誤

到目前為止,您已經了解了 PhpStorm 效率提示和技巧,但等等,還有更多。 效率不是它唯一可以提供幫助的領域,它還可以幫助避免錯誤,甚至在您的程序第一次運行之前。

開箱即用,PhpStorm 會告訴您明顯的錯誤。

例如,如果您忘記了語句後的分號,它會將其標記為紅色,但該功能是微不足道的,所以我不會描述它。

有趣的是,當 PhpStorm 告訴您更複雜的錯誤時,當您通過 PHPDocs 向它提供所需的信息時。

理想情況下,PHPDoc 規範對您的團隊來說是所有方法的強制性要求,並且盡可能嚴格。 再次考慮我們的User類的示例。 假設我們有一個函數,它返回一個User對像數組:

一組用戶對象。

默認情況下它沒有被記錄,因此其他開發人員可能不知道返回值的類型並且可能不正確地使用它。

例如,其他一些開發人員想要檢索用戶名列表。 出於某種原因,她認為User對像有一個 getName() 方法。 但實際上並非如此,因此開發人員犯了一個錯誤:

在此示例中,用戶類沒有 getName() 方法。

PhpStorm 不會將此視為錯誤,因為它對 $user 變量一無所知。 所以它沒有被注意到,我們最終會遇到一個非常討厭的錯誤。

第一個選項是只打開嚴格類型,這在 PHP7 中成為可能,但我們假設由於某種原因我們不能這樣做。 也許我們正在使用遺留代碼。 在這種情況下,如果我們允許,PhpStorm 會幫助我們。

為此,您需要為每個函數生成一個 PHPDoc。 這通常被認為是一個好習慣,它將幫助您避免錯誤、與其他開發人員相處,甚至通過雇主檢查您的源代碼的面試。

要生成 PHPDoc,請將光標移至函數名稱,按Alt + Enter ,在彈出菜單中選擇“Generate PHPDoc for function”項,然後再次按Enter

Alt+enter 提供了為函數生成 PHPDoc 的選項。

將出現基本的 PHPDoc 模板:

我們的 User 類的基本 PHPDoc 模板。

你可以看到 PhpStorm 猜測返回值是一個數組,但它無法猜測它是一個User對象的數組,所以讓我們通過將 'array' 更改為讀取 'User[]' 來明確規定這一點:

更新 PHPDoc 以提供 User[] 作為返回值。

既然我們已經告訴了 PhpStorm 它需要了解該方法的內容,讓我們回到getUserNames()方法調用:

現在已經定義了 PHPDocs,我們可以看到 getUserNames() 是無效的。

現在 PhpStorm 可以解析 PHPDoc 返回類型聲明,它可以指出錯誤,甚至可以提示到底是什麼錯誤。 PhpStorm 結合 PHPDocs 可以讓 PHP 成為一門非常嚴謹的語言! 一個驚人的結果!

PhpStorm 不僅適用於 PHP 開發人員

雖然涵蓋的所有主題都集中在 PHP 開發上,但 PhpStorm 基於一個非常強大的 IntelliJ 平台,使其可以與遠離 PHP 世界的各種語言、框架和技術堆棧一起使用。

前端開發

即使您是後端開發人員,您也需要不時解決一些前端問題。 它可以是 HTML 標記中的簡單修復、向 REST 客戶端添加參數、在 AngularJS 上編寫等。好消息是所有這些都可以在 PhpStorm 中完成。

基本的經驗法則是:檢查是否支持開箱即用。 如果沒有,請嘗試查找插件。

例如,開箱即用支持 Javascript、CSS 和流行的 CSS 預處理器,如 LESS 和 SASS。 AngularJS 支持很容易作為插件添加(安裝路徑與 IdeaVim 插件相同)。 有了這種心態,您將能夠解決幾乎所有可能的前端任務。

使用數據庫

通常,應用程序數據庫是通過命令行或特殊工具(如 MySQL Workbench)管理的,但 PhpStorm 也可以在這里為您提供幫助。

只需單擊屏幕右側的數據庫,您將看到可用數據庫列表(最初為空)和一個自動完成的查詢窗口,就像公共編輯區域一樣,非常方便。

PhpStorm 支持幾乎所有現代數據庫。 開箱即用支持 MySQL、PostgreSQL、Oracle 數據庫和 SQLite,而通過插件安裝支持 MongoDB。

平均堆棧

最後一個也是最令人驚嘆的非 PHP 示例是 MEAN 堆棧開發。

MEAN 代表 MongoDB、ExpressJS、AngularJS、Node.js。

這是一個趨勢技術堆棧,幾乎無處不在。 對於快速、輕量級的 Web 服務來說,它非常快並且非常好。

即使作為 PHP 開發人員,我有時也會創建 Node.js 服務作為 PHP 項目的補充工具(例如 websocket 服務、簡單的聊天機器人後端等)。

正如您可能猜到的那樣,PhpStorm 支持 MEAN 堆棧的所有組件,因此每當您需要創建 MEAN 堆棧項目時,請記住您不需要其他 IDE。 PhpStorm 將完美地完成這項工作。

PhpStorm 的力量掌握在您的手中

使用 PhpStorm 的強大功能和本文介紹的關鍵技能集,您甚至可以在完成輸入之前提高效率並防止錯誤。

相關:語言服務器協議教程:從 VSCode 到 Vim