2013-07-18 2 views
1

저는 2 년 동안 CI를 사용해 왔습니다. 실제로 나를 괴롭히는 한 가지는 &get_instance()입니다. 우리가 도서관, 도우미, 발표자, 모델 등의 내부에있는 동안 그것은 반가 웠지만, 매번 로딩하는 것은 아주 간단합니다. 어딘가에로드하는 것을 잊어 버렸고 $CI->blah->blah() 대신 $this->blah->blah()을 사용하면 너무 많은 문제가 발생하고 온라인에서 작업하는 경우 오류가 발생했다고 불평하는 클라이언트에게 직면하게됩니다. laravel에서 응용 프로그램 전체에 instance을로드 할 필요가 없음을 확인했습니다. laravelautoloading이고 모든 라이브러리 및 모델은 모두 응용 프로그램의 어느 곳에서나 사용할 수 있기 때문입니다. 그러나 이것은 왜 어떤 특정 장소에서 필요하지 않은 클래스를로드하는 데 불리한 것처럼 보입니다. 이것은 Codeigniter가 유연하다는 것을 나에게 알려주지 만 여전히 나는 대체물을 원합니다. &get_instance()을 사용하고 싶습니다. 어떤 생각이나 제안? 부디. 모델 또는 코어 모델이나 라이브러리에서Codeigniter에서 & get_instance()를 제거하는 방법

+0

자동 로딩은 모든 클래스를로드하지 말고 필요한 경우로드합니다. 하지만 다시, CodeIgniter에 대해 알고있는 것은 무엇입니까. – Rufinus

+0

대안이 없으므로 실제 원본 CI 모델을 얻으려면이 작업을 수행해야합니다. 실수로 $ this를 사용하면 텍스트 편집기에 내장 된 replace 함수를 사용하십시오. 응답을 위해 –

답변

0

//class MY_Model extends CI_Model 
//class SomeLibrary 

class Some_model extends CI_Model { 

     private $_CI; 

     public function __construct() { 
      parent::__construct(); //for model or core model 

      $this->_CI =& get_instance(); 
     } 

     //if you called attributs who does not exist in that class or parent class 
     public function __get($key) 
     { 
      return $this->_CI->$key; 
     } 

     //if you called methods who does not exist in that class or parent class 
     public function __call($method, $arguments) 
     { 
      call_user_func_array(array($this->_CI, $method), $arguments); 
     } 

     public function test() { 
      var_dump($this->some_controller_key); 
      var_dump($this->some_lib_loaded); 
     } 
} 

이 * 아직 멋진 플렉시 인증

//from a Model to keep access of CI_Controller attributs 
    public function &__get($key) 
    { 
     $CI =& get_instance(); 
     return $CI->$key; 
    } 
에서 코드의 조각에서 영감을

을 테스트하지

나는 충격을 받았다 내가 그것을 보았을 때 ^^

To e xplain &__get, 나는이 마법 메서드를 PHP가 다시 실행하지 않는 두 번째 호출이라고 생각하지만 첫 번째 호출에서 그의 결과를 가져올 것입니다.

+0

주셔서 감사합니다. 나는 그것을 반드시 시험 할 것이다. –

관련 문제