使用 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-&gt;usermodel-&gt;xx 之类的方式访问。

以上是关于使用 get_instance() 时自动完成 Codeigniter的主要内容,如果未能解决你的问题,请参考以下文章

用逗号分隔的 jQuery 自动完成文本在 CodeIgniter 中不起作用

$CI =& get_instance() 用法:关于CodeIgniter中get_instance() 函数

text CodeIgniter - 何时使用get_instance()

CodeIgniter:My_Lang 中的 get_instance

CI-CodeIgniter中“超级对象”:$CI =& get_instance()

C++11 静态局部变量和线程