## php 錯誤
### php.ini關于Error的設置
- error_reporting = E_ALL 設置php錯誤報告級別
- display_error = On 是否顯示錯誤報告
- log_error = On 是否開啟日志記錄
- error_log = D:/www 錯誤日志記錄位置
### Error 類別
- 語法錯誤:違背了程序語言的規則錯誤,稱之為語法錯誤。比如不以分號結束的語句,或函數寫錯時都會出現語法錯誤。語法錯誤PHP會在運行前檢測出來
- 運行錯誤:經過語法錯誤檢測后,將開始運行PHP代碼,在此發生的錯誤為運行時錯誤。常見運行錯誤1.加載不存在文件。2.連接數據庫失敗。3.遠程請求失敗。4.函數或類不不存在。
- 邏輯錯誤:邏輯錯誤是指軟件開發工程師在業務邏輯開發中造成錯誤。
### 錯誤報告
| 值 | 常量 | 描述 |
| --- | --- | --- |
| 1 | E\_ERROR | 致命的運行時錯誤。這類錯誤一般是不可恢復的情況,例如內存分配導致的問題。后果是導致腳本終止不再繼續運行 |
| 2 | E\_WARNING | 運行時警告 (非致命錯誤)。僅給出提示信息,但是腳本不會終止運行。 |
| 8 | E\_NOTICE | 運行時通知。表示腳本遇到可能會表現為錯誤的情況。 |
| 64 | E\_COMPILE\_ERROR | 致命編譯時錯誤。類似 E\_ERROR |
| 2048 | E\_STRICT | 啟用 PHP 對代碼的修改建議,以確保代碼具有最佳的互操作性和向前兼容性。 |
| 8192 | E\_DEPRECATED | 運行時通知。啟用后將會對在未來版本中可能無法正常工作的代碼給出警告。 |
| 8191 | E\_ALL | 所有錯誤和警告,除級別 E\_STRICT 以外。 |
### 錯誤處理
- 通過自定義錯誤與日志處理引擎,讓錯誤處理個性化。同時有些錯誤是在用戶訪問發生的,通過日志可以更全面檢測網站運行狀態。
- 通過set_error_handler 捕獲錯誤,并注冊錯誤處理函數。一般在開發環境下顯示錯誤信息,在生產環境下記錄錯誤日志
## php 異常
- 異常需要手動拋出。
```
$result = new PDO() // 拋出錯誤
$result = new PDO('') // 拋出異常
```
### 異常和部分錯誤都實現了Throwable接口。
* ArithmeticError 數學運算錯誤
* DivisionByZeroError 除數為0的錯誤
* ParseError 解析代碼時發生錯誤如調用`eval`函數時
* TypeError 函數參數類型錯誤,函數返回值錯誤
### 自定義異常類
- 需要繼承系統的Exception
- 可重寫Exception類的__toString方法
- 實際開發中需要根據不同業務創建處理錯誤的異常類,推薦使用異常來處理錯誤而不是PHP的錯誤處理機制。(可在set_error_handle中注冊的方法拋出一個異常,然后走自定義異常的流程)
- linux 基礎
- ln 鏈接
- linux 環境變量
- linux 進程查看
- nginx
- redis
- redis 安裝
- php 底層原理
- php源碼編譯安裝
- phpize文件
- php命令行
- php7 新特性
- php7 變量
- php7 生命周期
- php sapi運行模式
- php 內存管理
- php 運行機制和Zend虛擬機
- php垃圾回收
- php 基礎
- php.ini
- php函數
- 面向對象
- php 文件上傳
- ob緩沖和頁面靜態化
- php中的session
- php cURL擴展
- composer 應用
- php 錯誤和異常
- thinkphp
- tp6容器和依賴注入
- tp6 的服務
- tp6事件
- tp6 多應用
- tp6路由
- tp6 cache
- tp6 request
- tp6 中間件
- tp6 response
- tp6 Db
- 備忘錄
- 數據庫表