CodeIgniter 採用動態載入類庫($this->load->library()),IDE 無法靜態分析 $this->load、$this->db 等屬性型別,導致程式碼提示失效。解決方法是在核心基底類別加入 @var PHPDoc 註解。
system/core/Controller.php(基底控制器)system/core/Model.php(基底模型)/**
* @var CI_Loader $load
* @var CI_DB_active_record $db
* @var CI_Calendar $calendar
* @var CI_Email $email
* @var CI_Encrypt $encrypt
* @var CI_Ftp $ftp
* @var CI_Hooks $hooks
* @var CI_Image_lib $image_lib
* @var CI_Language $language
* @var CI_Log $log
* @var CI_Output $output
* @var CI_Pagination $pagination
* @var CI_Parser $parser
* @var CI_Session $session
* @var CI_Sha1 $sha1
* @var CI_Table $table
* @var CI_Trackback $trackback
* @var CI_Unit_test $unit
* @var CI_Upload $upload
* @var CI_URI $uri
* @var CI_User_agent $agent
* @var CI_Validation $validation
* @var CI_Xmlrpc $xmlrpc
* @var CI_Zip $zip
*/
在類別定義開頭,class CI_Controller { 之前:
<?php
/**
* CodeIgniter Controller Class
* ...
* 上述 @var 註解放這裡
*/
class CI_Controller {
// ...
}
@var 推斷屬性型別__get() 動態載入類庫,靜態分析無法追蹤class MY_Controller extends CI_Controller {
/**
* @var My_Custom_Lib $mylib
* @var Another_Lib $another
*/
// ...
}
composer require --dev codelgniter/ide-helper 自動產生 _ide_helper.php.phpstorm.meta.php 定義動態回傳型別bmewburn.vscode-intelephense-client 內建 CI Stubs| 操作 | 修改前 | 修改後 |
|---|---|---|
$this->db-> | 無提示 | 列出 select(), where(), get()... |
$this->load-> | 無提示 | 列出 library(), model(), view()... |
$this->session-> | 無提示 | 列出 set_userdata(), userdata()... |
僅需幾十行註解,即可讓 IDE 成為 CodeIgniter 開發的強大助手,大幅減少查閱文檔時間與拼寫錯誤。