我想知道是否有任何方法可以销毁Codeigniter库实例。
我想做的是这样的事情:
$this->load->library('my_library');
/**
Code goes here
**/
$this->my_library->destoy_instance();
我需要这样做的原因是因为我需要在执行大型脚本时释放RAM内存。
任何帮助都会受到很大的关注。
答案 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
}