# 代碼檢查
在這個頁面中:
* 代碼檢查
* [代碼分析基礎](#代碼分析基礎)
* [檢查配置文件](#檢查配置文件)
* [檢查嚴重性](#檢查嚴重性)
* [檢查區塊](#檢查區塊)
* [代碼檢查的例子](#代碼檢查的例子)
* [定位無作用代碼](#定位無作用代碼)
* [高亮未使用聲明](#高亮未使用聲明)
* [未解決的JavaScript函數和方法](#未解決的JavaScript函數和方法)
* [PHP代碼檢查例子](#PHP代碼檢查例子)
* [訪問檢查設置](/如何使用/常規指南/代碼檢查/訪問檢查設置.md)
* [分析檢查結果](/如何使用/常規指南/代碼檢查/分析檢查結果.md)
* [配置檢查嚴重性](/如何使用/常規指南/代碼檢查/配置檢查嚴重性.md)
* [改變當前文件高亮級別](/如何使用/常規指南/代碼檢查/改變當前文件高亮級別.md)
* [自定義配置文件](/如何使用/常規指南/代碼檢查/自定義配置文件.md)
* [改變區塊順序](/如何使用/常規指南/代碼檢查/改變區塊順序.md)
* [導出檢查結果](/如何使用/常規指南/代碼檢查/導出檢查結果.md)
* [解決問題](/如何使用/常規指南/代碼檢查/解決問題.md)
* [抑制檢查](/如何使用/常規指南/代碼檢查/抑制檢查.md)
* [運行檢查](/如何使用/常規指南/代碼檢查/運行檢查.md)
* [通過名稱運行檢查](/如何使用/常規指南/代碼檢查/通過名稱運行檢查.md)
* [離線運行檢查](/如何使用/常規指南/代碼檢查/離線運行檢查.md)
* [自動應用快速修復](/如何使用/常規指南/代碼檢查/自動應用快速修復.md)
## <span id='代碼分析基礎'>代碼分析基礎</span>
PhpStorm有健壯、快速、靈活的靜態代碼分析功能。它發現編譯和運行錯誤,建議改正和改善在實際編譯之前。
PhpStorm執行代碼分析通過對代碼進行檢查。有大量PHP和其他支持語言的檢查。
檢查不僅檢測編譯錯誤,也辨別無效代碼。每當你有不可訪問代碼,未使用代碼,非限定字符串,未解析方法,內存泄漏甚至是拼寫問題 - 你將極快的找到這些問題。
代碼分析可以用以下幾種方式執行:
* 默認的,PhpStorm分析所有打開的文件并在編輯器右側高亮顯示所有發現的代碼問題。在編輯器右側可以查看整個文件的分析狀態(右上角的圖標)。
當發現錯誤,圖標顯示為;在警告的情況下為;如果都沒問題,圖標顯示為
* 作為選擇的,可以在[大部分模式](/如何使用/常規指南/代碼檢查/運行檢查.md)下對指定的范圍運行代碼分析,甚至是整個項目一樣大的范圍。
* 如果需要,可以在指定的范圍內[運行單一的代碼檢查](/如何使用/常規指南/代碼檢查/通過名稱運行檢查.md)
對大多數發現的問題,PhpStorm提供[快速修復建議](/如何使用/常規指南/代碼檢查/解決問題.md)。你可以在文件中快速審查錯誤通過按`F2`和`Shift+F2`在高亮行之間跳轉。
更多信息和程序化描述 ,參見[配置檢查嚴重性](/如何使用/常規指南/代碼檢查/配置檢查嚴重性.md)
## <span id='檢查配置文件'>檢查配置文件</span>
當你檢查代碼,可以告訴PhpStorm你想查看那種檢查類型的問題并獲取相關的報告。這樣配置可以儲存為**檢查配置文件**。
一個檢查配置文件定義要查找的問題類型,例如,某些檢查項的[啟用/禁用](/如何使用/常規指南/代碼檢查/禁用和啟用檢查.md)狀態和他們的[嚴重性](/如何使用/常規指南/代碼檢查/配置檢查嚴重性.md),配置文件在[檢查](/參考/工具窗參考/檢查工具窗.md)設置頁面中配置。
要設置當前檢查配置文件(在當前編輯器中用來實時代碼分析),僅僅在[檢查](/)設置頁面中選中它并應用變更。當你[運行代碼分析](/如何使用/常規指南/代碼檢查/運行檢查.md)或[執行單一檢查](/如何使用/常規指南/代碼檢查/通過名稱運行檢查.md),可以指定對每個運行使用哪個配置文件。
<span id='基本配置文件的類型'>檢查配置文件可以應用于整個IDE或指定的項目:</span>
* **項目配置文件**是可以分享的并且可以讓團隊成員通過VCS訪問。它們儲存在項目目錄:`<project>/.idea/inspectionProfiles`
* **IDE配置文件**僅作為個人使用并儲存在`USER_HOME/.<PhpStorm version>/config/inspection`目錄的XML文件中。
PhpStorm自帶以下預定義檢查配置文件:
* **默認**:這個本地(IDE級別)配置文件僅作為個人使用,應用于所有項目,并儲存在`USER_HOME/.<PhpStorm version>/config/inspection`目錄的XML文件中。
* **項目默認**:當新的項目被創建時,項目默認配置文件從[項目模板設置](/如何使用/常規指南/配置項目和IDE設置/訪問默認設置.md)中拷貝。該配置文件是可分享的并應用于當前項目。
當項目創建后,任意項目默認配置文件的修改將被其他項目忽略。
當[項目模板設置](/如何使用/常規指南/配置項目和IDE設置/訪問默認設置.md)中的項目默認配置文件被修改了,改變的配置文件將應用于所有新創建的項目,但已存在的項目將不受影響因為它們已經有了配置文件的副本。
項目默認配置文件在`<project>/.idea/inspectionProfiles`目錄中儲存為`Project_Default.xml`文件。
一個項目可以根據需要有許多檢查配置文件。有兩種方法創建新的配置文件:可以從項目默認配置文件的副本[添加新的配置文件](/如何使用/常規指南/代碼檢查/自定義配置文件.md#創建和復制配置文件)或[復制](/如何使用/常規指南/代碼檢查/自定義配置文件.md#創建和復制配置文件)當前選擇的配置文件。新創建的配置文件儲存為XML文件,位置基于[基本配置文件的類型](/#基本配置文件的類型)
每當一些對配置文件的變更被執行和接受時`<profile_name>.xml`檢查配置文件中出現相應的項。該文件僅儲存與默認配置文件不同的項。
更多詳情參考[自定義配置文件](/如何使用/常規指南/代碼檢查/自定義配置文件.md)章節。
## <span id='檢查嚴重性'>檢查嚴重性</span>
檢查嚴重性表示發現的代碼問題對整個項目的嚴重性并決定在編輯器中如何高亮顯示發現的問題。默認的,每個檢查有以下嚴重性級別之一:
* **服務器問題**
* **打字錯誤**
* **信息**
* **弱警告**
* **警告**
* **錯誤**
可以為每個檢查項增加或減少嚴重性級別。也就是,可以強制PhpStorm顯示警告作為錯誤或弱警告。按相同的方法,最初的弱警告可以顯示為警告或錯誤,或者僅作為信息。
也可以配置每個嚴重性級別所高亮顯示的顏色和字體。除此以外,可以創建自定義嚴重性級別并可以對指定檢查設置它們。
如果需要,可以在[不同的范圍內](/如何使用/常規指南/代碼檢查/改變區塊順序.md)對同一個檢查設置不同的嚴重性級別。
所有上述的檢查修改將儲存在[檢查設置](#檢查配置文件)中當前選中的[檢查配置文件](/如何使用/常規指南/代碼檢查/訪問檢查設置.md)并且被應用當配置文件被使用時。
## <span id='檢查區塊'>檢查區塊</span>
默認的,所有可用的代碼檢查應用于所有項目文件。如果需要,可以對不同[區塊](/參考/設置參數對話框/外觀行為/區塊.md)獨立配置每個代碼檢查([啟用/禁用](/如何使用/常規指南/代碼檢查/禁用和啟用檢查.md),[改變它的嚴重性級別](/如何使用/常規指南/代碼檢查/配置檢查嚴重性.md)和其他選項)。這樣配置,像任意其他的檢查設置 ,被保存并應用于指定[配置文件](#檢查配置文件)的一部分。
可能有復雜的情況當不同區塊關聯配置不同的檢查。當在文件中執行的檢查屬于一些或所有其它區塊,設置為最高優先級的配置將被應用。優先級設置在[檢查設置](/如何使用/常規指南/代碼檢查/訪問檢查設置.md)頁面中指定位置的區塊檢查中配置:最頂部的配置有最高優先級。其它位置的配置的優先級較低。
更多信息和規程描述,參見[對不同范圍配置檢查](如何使用/常規指南/代碼檢查/改變區塊順序.md)
## <span id='代碼檢查的例子'>代碼檢查的例子</span>
在[檢查](/參考/設置參數對話框/編輯器/檢查.md)頁面,所有檢查項按類別分組。分析代碼最常見的任務是:
* 查找可能的BUGS
* 定位無作用代碼
* 檢測性能問題
* 改善代碼結構和可維護性
* 遵循代碼指南和標準
* 遵循規范
### <span id='定位無作用代碼'>定位無作用代碼</span>
PhpStorm在編輯器中高亮顯示無作用代碼塊。無作用代碼是在應用程序運行期間從不會訪問的代碼。也許,你甚至在項目中不需要這部分代碼。根據情況,這些代碼可能被作為BUG或冗余。無論如何,它減少應用程序的性能并增加維護的復雜度。這有個例子。
所謂的常量條件 - 例如,條件從來不會遇見或總是為真。在這種情況下,相關的代碼不可訪問并且實際上是無作用代碼。

PhpStorm高亮if條件如果它總是為真。所以這部分用else環繞的代碼實際上是無作用代碼因為它從不執行。
### <span id='高亮未使用聲明'>高亮未使用聲明</span>
PhpStorm也可以立即高亮顯示整個項目中都不使用的Java類,方法和字段通過未使用聲明檢查。各種Java EE `@Inject`注釋,測試代碼入口點和其它隱式依賴配置,未使用聲明檢查相當重視這些部分。
### <span id='未解析的JavaScript函數和方法'>未解析的JavaScript函數和方法</span>
這個檢查發現引用定義不明確的JavaScript函數和方法。

### <span id='PHP代碼檢查例子'>PHP代碼檢查例子</span>
* **未解析的包含**
這個檢查發現包含不存在的文件并建議兩種快速修復:用指定的名稱創建文件或使用PHP文檔注釋。

* **動態方法被作為靜態調用**
這個檢查項檢查是否一個靜態方法調用應用于一個靜態方法。

`do_something()`方法被作為靜態調用但實際是動態方法。
* **類中未實現的抽象方法**
這個檢查項檢查是否從抽象類繼承的類是否明確的聲明為抽象或從超類繼承的方法是否實現。

`ConcreteClass`類是從超類`AbstractClass`繼承的并且沒有明確的聲明為抽象。與此同時,從`AbstractClass`類繼承的函數`GetValue()`沒有被實現。
* **參數類型**
PHP變量沒有類型,因此基本上變量類型在函數定義的時候沒有指定。然而,如果一個參數明確的定義了,函數被調用時參數應該為合適的類型。

函數`do_something`指定參數類型為`integer`,但調用時的參數為`string`。
* **未定義的類常量**
這個檢查項檢查在類中引用的常量沒有實際被定義。

常量`NotExistingConst`在類`Animal`中被作為常量引用,但類中實際上沒有定義。
* **未定義常量檢查**
這個檢查項檢查引用的常量在檢查范圍內沒有實際被定義。

被引用的常量`UndefinedConst`在檢查區塊中沒有被定義。
* **未定義的類**
這個檢查項檢查引用的類在檢查范圍內沒有實際被定義。

被引用的類`NotExistingClass `沒有被定義。
* **未定義字段**
這個檢查項檢查引用的類的字段在類內沒有實際被定義。

`$obj`變量是類`Animal`的一個實例。`$var`的申明包含了類`Animal`中`field`字段的引用,但是該字段沒有在類中聲明。
在PHP環境中,未定義的字段和未定義的方法檢查可能報告一些錯誤當實際上沒有問題發生。這個會發生在嘗試訪問屬性或給屬性賦值,這些屬性可能沒有實際定義但引用的類包含get和set魔術方法。這應該不會報告錯誤因為這些方法每次調用或引用未定義的屬性,然而,PhpStorm任然將它們作為錯誤或警告,基于你在檢查頁面設定的嚴重性級別。
要在這種情況下抑制未定義方法的報告,[重新配置檢查嚴重性](/如何使用/常規指南/代碼檢查/配置檢查嚴重性.md)。要做到這個,打開設置對話框的[檢查](/參考/設置參數對話框/編輯器/檢查.md)頁面,點擊列表中的檢查名稱并在選項區域選擇**Downgrade severity if \_\_magic methods are present in class**。在這之后,這種情況下未定義的屬性將比通常設置顯示低一級的嚴重性,默認的,用信息級別來代替警告級別。
要抑制未定義字段不相干的報告,清空**Notify about access to a field via magic method**和**Notify about PHP dynamic field declaration**復選框。當這些復選框選中時,PhpStorm報告的錯誤甚至包含`__get()`和`__set()`魔術方法。
* **調用未定義的函數**
這個檢查項檢查在檢查范圍內沒有定義的函數。

調用的方法`undefined_function()`沒有在檢測范圍內定義。
* **未定義的變量**
這個檢查項檢查沒有在檢查范圍內定義和初始化的變量。PHP不需要每個變量應該被聲明和初始化。PHP可以實時初始化這些變量并分配空置。然而,這個檢查項可以檢查到這種差異。
未定義的變量檢查可以在設置對話框的檢查頁面中通過勾選復選框來配置。
* **在全局空間中檢查**:選擇復選框來運行檢查不在函數方法,類和命名空間中的變量,也就是[全局空間](http://php.net/manual/en/language.namespaces.global.php)

* **報告可能沒有定義的變量**:選擇復選框來顯示警告即使變量的定義沒有明確的缺失。這種情況可能發生當這個變量在多個路徑中使用并且一些地方不能到達,例如,`if()`語句:

* **忽略'include'和'require'語句**:抑制檢查包含`include**和**require`語句的范圍。如果復選框沒有勾選,PhpStorm處理這種定義在類中的變量并通過這種語句引用的不會報告錯誤。如果復選框被選中,未定義的變量錯誤將報告。

# 另請參閱:
規程:
* [意向動作](/如何使用/常規指南/意向動作/README.md)
參考:
* [檢查](/參考/設置參數對話框/編輯器/檢查.md)
* [區塊](/參考/設置參數對話框/外觀行為/區塊.md)
* [檢查工具窗](/參考/工具窗參考/檢查工具窗.md)
- 前言
- 初見PhpStorm
- 系統要求
- 安裝和啟動
- 注冊PhpStorm
- 快速開始引導
- 你不能錯過的:快捷鍵
- 第一步
- 創建和運行你的第一個PHP項目
- 創建和運行你的第一個Web項目
- 如何使用
- 常規指南
- 用戶界面引導
- 歡迎界面
- 菜單和工具欄
- 導航欄
- 狀態欄
- PhpStorm視圖模式
- 設置背景圖片
- PhpStorm編輯器
- 基礎編輯規程
- 在編輯器中打開和重新打開文件
- 在編輯器中關閉文件
- 在編輯器中選擇文本
- 剪切復制粘貼
- 在PhpStorm和資源管理器之間復制粘貼
- 在編輯器中使用拖放
- 注釋和取消注釋代碼塊
- 保存和撤銷更改
- 撤銷和重做更改
- 透鏡模式
- 多插入符
- 草稿
- 在編輯器中縮放
- 高級編輯規程
- 添加刪除和移動代碼元素
- 添加編輯器到收藏夾
- 改變縮進
- 代碼折疊
- 基礎
- 代碼折疊方法
- 折疊預定義和自定義區域
- 折疊菜單的命令和關聯的快捷鍵
- 指定代碼折疊偏好
- 查看折疊的代碼片段
- 使用代碼折疊注釋
- 查看當前插入符位置
- 格式化代碼
- 切換可寫狀態
- 切換大小寫
- 高亮括號
- 拼寫檢查
- 連接行和文字
- 分割字符串為多行
- 在表格格式編輯CSV和類似文件
- 在編輯器中使用宏
- 錄制宏
- 回放宏
- 編輯宏
- 綁定宏到快捷鍵
- 管理編輯器標簽頁
- 配置編輯器標簽行為
- 在不同標簽頁之間跳轉
- 鎖定和解鎖標簽頁
- 分割和合并編輯窗口
- 分離編輯器標簽
- 使用標簽組編輯多文件
- 改變編輯器標簽頭的位置
- 編輯器標簽排序
- 使用TODO
- 定義TODO模式和過濾器
- 創建TODO項
- 查看TODO項
- PhpStorm工具窗
- 操作工具窗
- 指定工具窗的外觀設置
- 在工具窗快速搜索
- 查看模式
- 管理項目收藏夾
- 配置項目和IDE設置
- 訪問默認設置
- 訪問設置
- 配置代碼風格
- 配置顏色和字體
- 為控制臺配置配色方案
- 配置項目文件編碼
- 配置單獨的文件編碼
- 配置快捷鍵
- 配置行分隔符
- 配置菜單和工具欄
- 配置快速訪問列表
- 配置區塊和文件顏色
- 配置第三方工具
- 復制代碼風格設置
- 創建和注冊文件類型
- 導入和導出設置
- 分享你的IDE設置
- 在方案之間切換
- 切換引導JDK
- 配置項目結構
- 配置根目錄
- 在根目錄中配置文件夾
- 在項目中排除文件
- 創建和管理項目
- 從頭創建新項目
- 從現有代碼導入項目
- 從本地代碼創建項目
- 從下載的文件創建項目
- 從框架模板生成項目
- 使用Yeoman生成器創建項目
- 打開、重新打開和關閉項目
- 打開多個項目
- 保存項目為模板
- 清空系統緩存
- 重命名項目
- 文件和代碼模板
- 解析指令
- 文件模板變量
- 創建和編輯文件模板
- 動態模板
- 簡易、參數化和環繞模板
- 動態模板縮寫
- 動態模板變量
- 動態模板組
- 創建和編輯動態模板
- 創建和編輯模板變量
- 分享動態模板
- 填充項目
- 創建目錄
- 從模板創建文件
- 創建空文件
- 創建PHP類接口和特性
- 生成代碼
- 使用動態模板創建代碼結構
- 使用環繞模板創建代碼結構
- 生成Getter和Setter
- 打開和移除語句
- 包住標簽,應用環繞模板的例子
- 使用排列規則重新整理代碼
- 用語言結構環繞代碼塊
- 使用后綴模板
- 代碼補全
- 基本代碼補全:補全名稱和關鍵字
- 智能類型代碼補全:基于輸入信息補全代碼
- 補全語句
- 補全路徑
- 補全標點
- 補全標簽名稱
- 展開單詞
- 使用建議列表
- 創建和優化導入
- 創建導入
- 優化導入
- 代碼檢查
- 訪問檢查設置
- 分析檢查結果
- 配置檢查嚴重性
- 改變當前文件高亮級別
- 自定義配置文件
- 禁用和啟用檢查
- 改變區塊順序
- 導出檢查結果
- 解決問題
- 抑制檢查
- 運行檢查
- 通過名稱運行檢查
- 離線運行檢查
- 自動應用快速修復
- 意向動作
- 應用意向動作
- 配置意向動作
- 禁用意向動作
- 查看頁面Web內容
- 配置瀏覽器
- 在瀏覽器中預覽頁面Web內容
- 在編輯器中查看Web頁面的HTML代碼
- 查看參考信息
- 查看定義
- 查看內聯文檔
- 查看外部文檔
- 查看方法參數信息
- 瀏覽源代碼
- 使用書簽跳轉
- 管理書簽
- 在文件和工具窗之間跳轉
- 在IDE組件之間跳轉
- 在方法和標簽之間跳轉
- 在測試和測試主題之間跳轉
- 跳轉到動作
- 跳轉到大括號
- 根據名稱跳轉到類、文件或符號
- 跳轉到自定義折疊區域
- 跳轉到符號的聲明或類型聲明
- 跳轉到超級方法或實現
- 跳轉到文件路徑
- 跳轉到行
- 跳轉到下一個或上一個更改
- 跳轉到下一個或上一個錯誤
- 跳轉到近期文件
- 跳轉到已瀏覽項目
- 使用導航欄跳轉
- 使用結構視圖跳轉
- 使用面包屑跳轉
- 搜索代碼
- 在文件中查找替換文本
- 在項目中查找替換文本
- 查找引用
- 在項目中查找引用
- 在當前文件查找引用
- 高亮引用
- 查看符號引用
- 查看近期查找引用
- 在插入符處查找詞語
- 使用搜索結果
- 搜索全部
- 結構搜索和替換
- 搜索模板
- 結構搜索和替換-常規步驟
- 創建和編輯搜索模板
- 結構搜索和替換示例
- 重構代碼
- 分析應用程序
- 運行調試配置
- 運行
- 調試
- 測試
- 代碼覆蓋率
- 服務端作業:拷貝文件
- 使用本地歷史
- 版本控制概念
- 管理插件
- 管理任務和內容
- 使用命令行工具
- 使用文件觀察者
- 使用嵌入式本地終端
- 從命令行啟動PhpStorm特性
- 使用后臺任務
- 使用語言注入
- 比較文件和文件夾
- 選擇文件或文件夾
- 在PhpStorm和文件管理器之間復制粘貼
- 教程
- 參考
- 獲取幫助