如何销毁Codeigniter库实例

时间:2015-03-15 15:19:56

标签: php codeigniter instance destroy

我想知道是否有任何方法可以销毁Codeigniter库实例。

我想做的是这样的事情:

$this->load->library('my_library');
/**
    Code goes here
**/
$this->my_library->destoy_instance();

我需要这样做的原因是因为我需要在执行大型脚本时释放RAM内存。

任何帮助都会受到很大的关注。

2 个答案:

答案 0 :(得分:3)

您只需使用unset或设置null即可。

unset($this->my_library);

OR

$this->my_library = null;

这个answer也值得一读,让您了解这两种方式的详细信息。

修改

没有内置方法来销毁加载的库对象。但是你可以通过扩展Loader类来实现。然后从该类加载和卸载库。这是我的示例代码..

应用/库/ custom_loader.php

class Custom_loader extends CI_Loader {
    public function __construct() {
        parent::__construct();
    }

    public function unload_library($name) {
        if (count($this->_ci_classes)) {
            foreach ($this->_ci_classes as $key => $value) {
                if ($key == $name) {
                    unset($this->_ci_classes[$key]);
                }
            }
        }

        if (count($this->_ci_loaded_files)) {
            foreach ($this->_ci_loaded_files as $key => $value)
            {
                $segments = explode("/", $value);
                if (strtolower($segments[sizeof($segments) - 1]) == $name.".php") {
                    unset($this->_ci_loaded_files[$key]);
                }
            }
        }

        $CI =& get_instance();
        $name = ($name != "user_agent") ? $name : "agent";
        unset($CI->$name);
    }
}

在您的控制器中..

$this->load->library('custom_loader');
// To load library
$this->custom_loader->library('user_agent');
$this->custom_loader->library('email');

// To unload library
$this->custom_loader->unload_library('user_agent');
$this->custom_loader->unload_library('email');

希望它会有用。

答案 1 :(得分:2)

好的,如果你需要在同一个控制器中重新创建同一个对象,我找到了一个解决方案。它传递给第三个属性的技巧,这是一个自定义名称,你可以分配对象。

$this->load->library('my_library', $my_parameters, 'my_library_custom_name');

如果您只是想取消设置对象,PHP会处理这个问题。您可以在班上使用析构函数进行确认。

public function __destruct() {

    // do something to show you when the object has been destructed

}