متد get_instance در کدایگنایدر چیست و چگونه کار می کند

 

این متد یک آبجکت سراسری از فریمورک را بر می گرداند. یعنی شما پس از فراخوانی این متد می توانید به تمامی نمونه های ایجاد شده در زمانی که فریمورک آغاز شده است را داشته باشید. درواقع یک singleton می باشد. singleton یک design pattern می باشد که یکی از کاربرد و اهداف آن دسترسی کل برنامه به یک آبجکت می باشد. شما در هر کجای برنامه می توانید به این آبجکت دسترسی داشته باشید. فرض کنید یک library در Codeigniter نوشته اید. حالا برای استفاده یک model در این کتابخانه باید از  دستور زیر استفاده کنید

 

$this->load->model("MyModel");

 

درحالی که فراخوانی مدل به این صورت در کتابخانه مورد نظر امکان پذیر نمی باشد. زیر زمانی که ما در یک Controller از دستور بالا استفاده می کنیم کنترلر از کلاس CI_Controller ارث بری می کند. کلاس کنترلر نوشته شده ما بعد از ارث بری از کلاس CI_Controller کار با مدل، سشن کوکی و دیگر امکانات را برای ما امکان پذیر می کند.

 

class MyController extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {
        $this->load->view("ViewFile");
    }

}

 

ولی برای استفاده از نمونه های ایجاد شده در برنامه و جاهایی غیر از کنترلر که دسترسی آن برای ما امکان پذیر نیست از متد get_instance استفاده می کنیم. مثال زیر را ببینید

 

class TestLib {
	
	function check_session($session_name) {
		$CI = get_instance();
		
		if ($CI->session->userdata($session_name)) {
			return TRUE;
		}
		
		return FALSE;
		
	}
	
}

 

در کلاس بالا که در دایرکتوری library موجود در فولدر application قرار دارد ما توانستیم با استفاده از متد get_instance به متغییر session در Codeigniter و در خارج از Controller به آن دسترسی داشته باشیم. به همین صورت می توانید به متغییر های دیگر مانند model، db، input و ... دسترسی پیدا کنید.

 

 

منبع: it3du.ir