제목 | 선배님들 라이브러리 호출 관련 질문합니다 ㅠ_ㅠ.. | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | 아리 | 작성시각 | 2016/11/08 17:49:14 |
|
|||
PHP VERSION : 5.3.26 CI VERSION : 3.1.1
* 컨트롤러 __construct 내부에서 선언한 라이브러리는 전역변수로 동작합니다 ( function 내부에서 호출해도 정상적으로 사용이 가능) function 내부에서 지역변수로 호출한 라이브러리는 불러오지 못합니다 ㅠㅠ (생성자 내부에 있는 코드 그대로 자르기 붙여넣기해도..)
*라이브러리 내부 사용시 $this->_ci = & get_instance(); $this->_ci->load->library('라이브러리파일명'); $변수 = $this->_ci->라이브러리파일명;
A라는 파일명이 있고, B라는 파일명이 있으면 A는 불러오기에 성공하고, B는 못불러옵니다 (두 파일 모두 컨트롤러의 생성자에서 호출시 호출가능..왜죠?ㅠㅠ) ㅠ_ㅠ.............안될거면 둘 다 안되던가..
도와주세요 ㅠㅠㅠㅠ... |
|||
다음글 | 페이지네이션 attribute 관련 질문입니다. (4) | ||
이전글 | 전 CI 2.2 버전인데.. 404 Not Found ... (3) | ||
한대승(불의회상)
/
2016/11/08 18:09:20 /
추천
0
뭐가 문제인지 모르겠어요
|
아리
/
2016/11/08 18:49:50 /
추천
0
그쵸..!
뭐 오류있는 버전이라던지 그런건 아닌거죠? ㅠㅠㅠㅠ 왜이러는걸까요.. |
한대승(불의회상)
/
2016/11/09 08:59:54 /
추천
0
@아리 전역이 아닌 지역으로 선언한 변수를 다른 함수에서 참조할 수 없는게 지극히 정상인데 왜 문제라는건지 모르겠어요.
|
아리
/
2016/11/09 11:14:59 /
추천
0
@한대승(불의회상) 아! 당연히 그건..안되는거 잘 알고있습니다.. 그정도로 모르면 여기 질문을 ㅠ_ㅠ..안올렸을...것 같은데 여튼 글이 좀 모호했다면 죄송합니다 :) 그런뜻이 아니구요.. 해당 함수 내에서 지역변수로 선언한 변수를 해당 함수내에서 못쓴다구요!
제가 질문하는내용은! 예를들면 * 컨트롤러질문내용
function __construct() { parent::__construct(); } function test(){ $this->load->library('testlib'); print_r($this->testlib); } 라고 쳤을때, (라이브러리 내용에 변수들이라던지가 있다고 가정) 아무것도 안나온다는 뜻입니다
__construct 내부에서 load하고 다른환경은 동일할 시 function __construct() { parent::__construct(); $this->load->library('testlib'); } function test(){ print_r($this->testlib); } 를 했을경우 잘 나오구요 |
변종원(웅파)
/
2016/11/09 12:03:22 /
추천
0
testlib 라는 라이브러리가 이상한거 같네요. (내부에서 ci 인스턴스를 호출하고 그걸 외부에서 또 $this로 호출하니....) 3rd party library인 tank_auth를 대상으로 위와 같이 테스트해봤을때 둘다 정상적으로 출력이 됐습니다. (2점대 기준, 3버전도 테스트 완료) |
kaido
/
2016/11/09 12:12:18 /
추천
0
CI 라이브러리로 구현해서 CI 방식으로 객체 접근 할때 몇가지 규칙이 있습니다. 기본적인거긴 하다만. 1. 대소문자 구문이 확실해야합니다. [캬멜케이스 적용되어있어야함] 2. 파일명도 대소문자 영문파일명으로만 구성되어야함. 3. 파일명과 대표하는 클래스명이 동일해야함. 4. 맴버에 접근이 가능해야함.
그렇지 않으면 그냥 new 해서 객체를 생성해서 꺼내다 쓰시면 됩니다. |
아리
/
2016/11/09 13:43:11 /
추천
0
@한대승(불의회상) 님
라이브러리 파일명은 임의로 적은것이며 실제 파일명이 아닙니다! 또한 해당 오류가 발생하는 (인스턴스 호출했던) 라이브러리와 컨트롤러에서 불러오는 라이브러리는 다른 파일입니다 :) 일단 라이브러리 내부 호출부는 어찌저찌 해결된것같습니다.. ㅠㅠ
컨트롤러의 경우에도.. 사용하고자 하면 construct에서 선언하고 전역변수로 사용하는데에는 문제가 없으므로 크게 문제삼을 일은 아니지만.. 왜 함수 내부 호출시에는 안되는건지 이유를 알고저 질문했었습니다 ㅠ.ㅠ
그동안 잘 되다가 신규 프로젝트(대략 일주일 전쯤 환경구축후 시작) 서버에서 안되길래 여쭤본거구요 ㅠ_ㅠ 일단 음.. 회사에서 (다른프로젝트) 몇년간 잘 사용중인코드이니 코드에 큰 문제는 없을것같습니다..! 그래도 혹시 싶어서 코드를 다 지우고 빈 내용에 변수만 하나 선언해서 출력해보았으나, 동일합니다 ㅠㅠ 저는 이유를 잘 모르겠어요.. 여하튼 테스트까지 해주시고 정말 감사합니다..!
kaido 님 1234 다 해당되는줄 알았는데! 지금보니 3번은 통과 못하는것같습니다..! 파일명에 _가 들어갑니다.
제 질문이.. 요약하면
전역변수로는 ( __construct 에서 load ) 사용이 가능하고, 지역변수로는 ( __construct 에서 호출x, 해당 라이브러리를 사용할 특정 함수 내부에서 load ) 사용이 불가능한 이유가 무엇인가요?
정도 될것같은데 ㅠ_ㅠ 제생각에는 안될거면 두 군데 다 안되는게 맞지 않나 싶어서.. _ 한번 빼보겠습니다..! 답변 주셔서 감사합니다 |
kaido
/
2016/11/09 14:46:21 /
추천
0
처음에 보고 저는 이렇게 판단 되었습니다. [어디까지나 예상입니다.]
생성자 __construct 에서 load 를 하면 obj가 생성자 영역에서 로드가 되고 지역에서 호출 하면 지역에만 obj가 로드가 되는데 $this 접근자를 사용하면 자연적으로 __construct 에 로드된것만 찾아오는것이 아닌지? 라는 예상은 해보았습니다.
CI4로 가면 오토로드로 관리가 되니, 지역 로드 자체를 안하게 될것 같습니다. 설령 지역에서 로드해도 오토로드를 거쳐서 로드를 해야하니, 자동으로 인식을 할테구요.
|