使用 get_instance() 时自动完成 Codeigniter
Posted
技术标签:
【中文标题】使用 get_instance() 时自动完成 Codeigniter【英文标题】:Autocomplete Codeigniter when using get_instance() 【发布时间】:2016-04-29 08:47:18 【问题描述】:在 phpStorm 中,我可以通过向 config/autocomplete.php 添加一个包含属性的文件来使用 Codeigniter 进行自动完成。 PhpStorm 能够读取此文件,并允许我快速导航到该功能并具有自动完成功能。在 autocomplete.php 中,我可以拥有 @property Account_model $Account_model
,然后每当我使用 $this->Account_model->xxx
时,自动完成功能就可以工作。
当使用get_instance()
时,所有这些功能都会失效。例如,在辅助类中,我必须使用$CI = & get_instance();
,然后是$CI->Account_model->xxxx
。以这种方式引用库时如何让自动完成功能起作用?
[注意:这只是一个简单的例子。我真正的用法是使用 PHPUnit,但解决上面的示例将使 PHPUnit 也能正常工作。]
【问题讨论】:
/** @var MyClassName $CI */
在 $CI
实例化之前?
这将部分工作,但如果 $CI 用于访问多个类(通常是),那么这不起作用。要让一个特定的类工作,这可以工作,虽然不是很理想。
【参考方案1】:
要将get_instance()
重新绑定到您的 IDE 的自动完成功能,您需要通知它这是 CodeIgniter 的本机控制器的一个实例。哪个是CI_Controller
:
/**
* Example MyClass Library within
* /application/libraries/
**/
class MyClass
/**
* @var CI_Controller
**/
private $ci;
/**
* Init MyClass
**/
public function __construct()
$this->ci =& get_instance();
【讨论】:
这正是我所需要的!@var CI_Controller
看起来很简单,但如果没有确切的语法,那就不行了。谢谢!【参考方案2】:
你可以在开始这样的课程之前尝试编写属性
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/**
* @property usermodel $usermodel
* @property groupmodel $groupmodel
* @property tablemodel $tablemodel
* @property ion_auth $ion_auth
* @property db_table_model $db_table_model
* @property apimodel $apimodel
* @property chartmodel $chartmodel
* @property todomodel $todomodel
* @property messagemodel $messagemodel
* @property photomodel $photomodel
* @property settingsmodel $settingsmodel
* @property backupmodel $backupmodel
*/
class Ajax extends MX_Controller
public $data;
public function __construct()
【讨论】:
这就是我在 autocomplete.php 中编写的方式。问题是使用get_instance()
时不起作用,因为仅$usermodel
不再访问该类。它可以通过$CI->usermodel->xx
之类的方式访问。以上是关于使用 get_instance() 时自动完成 Codeigniter的主要内容,如果未能解决你的问题,请参考以下文章
用逗号分隔的 jQuery 自动完成文本在 CodeIgniter 中不起作用
$CI =& get_instance() 用法:关于CodeIgniter中get_instance() 函数
text CodeIgniter - 何时使用get_instance()
CodeIgniter:My_Lang 中的 get_instance