$CI = & get_sublic(); 설명
코드 시그너의 소스코드를 보면
도우미 기능에서 코드를 계속 볼 수 있습니다.$CI =& get_instance();
누가 이 코드가 어떻게 작동하는지 설명해 줄 수 있나요?
$CI 슈퍼오브젝트에 대한 참조를 반환하고 있는 것은 알고 있습니다만, 어디에 있습니까?get_instance()
어디서 왔나요?
기본적으로 정적 방식이 아닌 함수를 사용하는 싱글톤 디자인 패턴입니다.
자세히 알아보려면 소스 코드를 확인하십시오.
그러니까 기본적으로 독신자를 강제하지는 않지만 공공장소로 가는 지름길이야
편집: 사실 이제 이해했습니다.PHP4 호환성을 위해 참조를 올바르게 반환하기 위해 double-global-variable-hack을 실행해야 했습니다.그렇지 않으면 레퍼런스가 엉망이 될 것이다.그리고 PHP4는 정적 메서드를 지원하지 않기 때문에(어쨌든) 함수를 사용하는 것이 더 나은 방법입니다.그래서 여전히 존재하는 이유는...
따라서 만약 당신의 앱이 PHP5만이라면, 그것을 하는 것에 아무런 문제가 없을 것이다.CI_Base::get_instance();
대신 똑같아...
get_instance()는 CodeIgniter의 핵심 파일에 정의되어 있는 함수입니다.슈퍼 오브젝트 외부에 있는 스코프에 있는 경우 CodeIgniter 슈퍼 오브젝트에 대한 싱글톤 참조를 취득하기 위해 사용합니다.
기지에 정의되어 있는 게 확실해요php 또는 이와 유사한 것입니다.
CI_Controller, Model, View를 확장하는 클래스만 사용할 수 있습니다.
$this->load->library('something');
$this->load->helper('something');//..etc
사용자 지정 클래스는 위의 코드를 사용할 수 없습니다.커스텀 클래스에서 위의 기능을 사용하려면 다음 명령을 사용해야 합니다.
$CI=&get instance();
$CI->load->library('something');
$CI->load->helper('something');
예를 들어, 사용자 지정 클래스에서
// this following code will not work
Class Car
{
$this->load->library('something');
$this->load->helper('something');
}
//this will work
Class Car
{
$CI=&get_instance();
$CI->load->library('something');
$CI->load->helper('something');
}
// Here $CI is a variable.
코드 시그너가 라이브러리와 클래스를 로드하는 방법을 이해하기 위한 싱글톤 구조입니다.
<?php
/*
====================================
start of the loader class
====================================
*/
class Loader {
protected function _init_class($class){
$C = Controller::get_instance();
$name = strtolower($class);
$C->$name = new $class();
}
public function _class($library){
if(is_array($library)){
foreach($library as $class){
$this->library($class);
}
return;
}
if($library == ''){
return false;
}
$this->_init_class($library);
}
public function view ($param) {
echo $param;
}
}
/*
===============================
End of the loader class
==============================
*/
/*
===============================
start of core controller class
==============================
*/
class Controller {
private static $instance;
function __construct () {
self::$instance = $this;
$this->load = new Loader();
}
public static function get_instance(){
return self::$instance;
}
}
/*
===============================
end of the core controller class
===================================
*/
/*
====================================================
start of library sections (put all your library classes in this section)
=====================================================
*/
class MyLibrary {
private $c;
function __construct() {
$this->c = Controller::get_instance();
}
function say($sentence) {
$this->c->load->view($sentence);
}
}
/*
====================================================
End of the library sections
====================================================
*/
/*
============================================
start of controller section (put all your controller classes in this section)
===========================================
*/
class Foo extends Controller {
function __construct () {
parent::__construct();
$this->load->_class('MyLibrary');
}
function bar() {
$this->mylibrary->say('Hello World');
}
}
/*
==========================================
End of the controller sections
==========================================
*/
$foo = new Foo();
$foo->bar();
$CI = get_buffic();는 도우미 상에서 $this를 $CI로 대체하는 것입니다.
건설업자에 넣는 것은 나에게 효과가 있었다.
function __construct()
{
$this->CI =& get_instance();
}
언급URL : https://stackoverflow.com/questions/4740430/explain-ci-get-instance
'sourcecode' 카테고리의 다른 글
MariaDB에 의해 암호화된 유휴 데이터를 확인하는 방법 (0) | 2022.09.22 |
---|---|
문자열의 특수 문자를 대체하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
시작일부터 종료일까지 매주 플래너 이벤트 표시 (0) | 2022.09.21 |
서로 다른 두 데이터베이스의 테이블 간에 결합하시겠습니까? (0) | 2022.09.21 |
SQLException이 잘못된 SQL 구문으로 인해 발생함 (0) | 2022.09.21 |