CI 묻고 답하기

제목 서로다른 뷰의 변수 scope
글쓴이 옥토넛 작성시각 2014/11/20 15:33:35
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 13475   RSS
// file : controllers/welcome.php
class Welcome extends CI_Controller {

 
    function index(){
        $this->load->view('welcome',array("title"=>"kim"));
        $this->load->view('welcome2');
    }

}

// file : views/welcome.php
echo $title;
// file : views/welcome2.php
echo $title;

소스코드가 위와 같을때요..welcome2에는 데이타를 첨부하지 않았지만 welcome의 변수와 scope가 같아서

$title에 "kim"이 출력이 되네요. 변수가 오염될 확률이 상당히 높을거 같은데..저만 그렇게 생각하는지요?
 다음글 위젯 질문드립니다. (2)
 이전글 세션사용시 .. 세션 데이터베이스 옵션 활성... 관련... (8)

댓글

한대승(불의회상) / 2014/11/20 15:38:28 / 추천 0
오염의 확률을 염두에 두고 주의하여 코딩 하셔야 합니다.
공유가 안되게 되면 서브뷰 로드 할 때 문제가 일어 나게 됩니다.
$this->load->view('head');
$this->load->view('content');
$this->load->view('tail');

// 공유 안되면 대략 난감!!!
옥토넛 / 2014/11/20 15:47:04 / 추천 0
아 hmvc로 board모듈의 view를 가져올때 게시물제목이 $title이 될수도 있는데요. view('head')에서도 <title>태그에도 $title이 될수도 있겟네요.

많은수의 모듈을 쓰게되면 대략 난감하겠네요 ㅠ 
kaido / 2014/11/20 15:53:16 / 추천 0
어라리? 저만 이해 못하는 건가요?

어차피 뷰 로드는 뷰 파일을 각각 불러온다고 생각 되서...

그리고 네이밍 룰은 원칙적으로 대표언어는 기피하는게 기본 원칙이긴 하죠. 
$title $cont $main  $delete $list  기타등등...

물론 오염을 막기 위해서 네임스페이스 라는 개념이 등장 하긴 했습니다만...

ㅇㅏ! 생각해보니 PHP에도 네임스페이스가 있던가...? 찾아봐야겠네요.




 
옥토넛 / 2014/11/20 15:56:28 / 추천 0
HMVC를 쓰고있는데요.

MX/Loader.php 에서 321번라인다음줄에
include($_ci_path);
$this->_ci_cached_vars = array(); // 추가된 부분

뷰파일 include후에 _ci_cached_vars를 빈배열로 초기화 해주면 문제 될게 있을까요?

저렇게 하니..welcome2에서는 $title을 모르는군요...
옥토넛 / 2014/11/20 15:57:57 / 추천 0
네임스페이스 써볼려고했는데요. 함수고 클래스고 역슬래시 붙이는것도 귀찮고...

HMVC용 패치가 있었는데 해보니 좀 잘안되더라구요 ㅠㅠ
변종원(웅파) / 2014/11/20 18:10:24 / 추천 0
같은 제어권 안에서 같은 변수가 사용되는게 이상한건가요? ^^
한대승(불의회상) / 2014/11/20 18:22:53 / 추천 0
변종원// 모듈 설계 하다 보면 같은 제어권으로 설정 되면 안될때가 필요 합니다. ^^
변종원(웅파) / 2014/11/20 18:59:45 / 추천 0
unset ^^

php가 c에 비해 변수 선언 없이 사용하고 메모리 반환을 하지 않아도 되서 편리하지만
변수 미리 선언하고 사용후 리셋을 하는 것도..... ^^
옥토넛 / 2014/11/20 19:01:46 / 추천 0
<span color:#008080"="" style="box-sizing: border-box; border-top-left-radius: 0px !important; border-top-right-radius: 0px !important; border-bottom-right-radius: 0px !important; border-bottom-left-radius: 0px !important;">unset($this->_ci_cached_vars) 말씀하시는건가요?