CodeIgniter 한국사용자포럼 BETA
빠르고, 유연한 PHP Framework!

CI 코드


CodeIgniter에서 controller와 method명으로 php 언어 구조명 쓰기      
서치 2 2,571 0 0 2010-05-27 01:26:41

2007년 4월에 다음에 있는 개인 블로그에 쓴 글입니다.(퍼갈시 출처를 반드시 명기해주시기 바랍니다)
-----------------------------
개인적으로 즐겨쓰는 php 프레임워크 중 codeigniter 라는 녀석이 있다.

 

php4와 php5를 지원하는데다 여러 라이브러리 등과도 효과가 좋아 얼마전 진행했었던 국회의원 사이트 제작에도 썼었다(지금 결과는 그다지 좋지 않지만)

 

그런데 이 프레임워크를 사용하다 보면 2가지 이상한 걸 발견하게 된다.

 

가령 페이지의 처음을 말하는 index 라는 단어는 이렇게 controller 디렉토리에 파일이 있다고 가정하면

 

index.php

 

이 파일의 클래스명은 index가 되어야 하고 상속받는 클래스는 controller 클래스가 된다.

 

여기서 자세히 봐야 할 건 index 이다. codeigniter의 class 구조에서 index 메소드는 메소드명이 url에 들어가 있지 않을 경우 기본 실행되는데, 이때 php class 구조는 class의 생성자 메소드가 클래스명이 되어야 한다는 것이다.

 

여기서 문제가 발생한다.  만약 여기서 다음과 같이 index.php 파일이 작성되어 있다면

 

class index extends Controller {

    function index () {

        parent::Controller();

        echo "Class 생성자";

    }

 

    function index () {

        echo "메소드가 지정되어 있지 않으면 기본적으로 실행되는 메소드";

    }

}

 

이 경우 에러가 발생한다. 왜냐면 php는 클래스를 상속했을때 메소드를 중복해서 정의할 수 있지만 상속된 클래스가 아닌 경우는 중복해서 정의할 수 없다.

 

위와 같은 경우 내가 말했던 것처럼 codeigniter 구조에 따르면 index 클래스 파일을 찾고 메소드 명이 지정되어 있지 않으면 index 메소드가 실행되어야 하는데 이때 index 메소드가 클래스 생성자가 되버리는 것이 문제다.

 

또 굳이 이런 문제가 아니더라도 list 등의 php 언어 구조를 메소드명으로 사용할 수 없다. 물론 define 등의 함수는 상관없지만 php 언어 구조만큼은 그게 안된다. 따라서 같이 올린 첨부파일을 보면 이와 같은 사례에 대해 직접 만들어서 diff로 떠놨으니 이런게 필요한 분이라면 다운받아 쓰시길 바란다.

 

첨부파일을 받아 적용하게 되면 다음과 같이 재 정의되어야 한다.

 

class indexController extends Controller {

    function indexController () {

        parent::Controller();

        echo "Class 생성자";

    }

 

    function indexMethod () {

        echo "메소드가 지정되어 있지 않으면 기본적으로 실행되는 메소드";

    }

 

    function listMethod () {

        echo "이것은 언어 구조입니다";

    }

}

 

파일명은 동일하게 사용한다. 후에 조금 여지가 된다면 index 만큼은 좀 예외로 남겨두고 싶다.(할까..)



  목록  

서치 2010-05-27 01:38:57
  
그런데 PHP 5 부터는 상속받은 클래스의 경우 클래스 초기화 메소드는 클래스명으로 하지 않고

__construct 인가요? 그걸 사용하기도 하더군요.

어디까지나 제가 2007년에 4 버전 가지고 통밥 굴릴때 이야기입니다.

여기에도 4버전 쓰시는 분 있나요?
jois 2010-05-30 15:42:19
  
 네, 전.. 아직도 PHP4 스타일에 맞게 코딩합니다~
아직도 php4인 곳에 적용해야 할일이 생기기 때문에...
물론 대부분의 경우 환경은 PHP5입니다..

근데 어쩔 수 없이 저런 경우는 만들지 말아야겠지요;;
일종의 예약어일테니...

번호 제   목 글쓴이 날짜 조회 추천수
580 CodeIgniter SimpleXML library [0] 타로 2012-02-05 29 0
577 CI 와 Smarty 템플릿의 결합 [2] 불의회상 2012-01-26 156 0
573 Okada Design Blog 소개 [3] 타로 2012-01-12 272 0
568 woctopus 계정관리도구 [2] milosz 2012-01-09 211 0
566 업로드된 이미지 정사각형으로 썸네일 만드는 함수 [3] 불의회상 2012-01-06 221 0
554 코드 이그나이터를 접하고 처음으로 만들어본 객체 입.. [6] 내일은 2011-11-11 1246 0
528 모델코드 생성기 [25] 불의회상 2011-10-13 1144 1
525 ci memo + tank_auth [2] milosz 2011-10-04 943 0
512 포럼소스를 2.0.1 버전에 맞게 수정하였습니다. [2] 탱크 2011-04-02 3546 2
509 CI 메뉴얼 CHM 버전(영문 2.0) [1] 브라이언 2011-03-30 1242 0
508 CI 메뉴얼 CHM 버전 [0] 브라이언 2011-03-30 1382 0
494 ci memo [8] pam 2011-02-20 1971 1
489 CI 압축 프로그램 [2] 준이 2010-12-27 1637 0
482 듬직이님의 헬퍼 ip 부분 추가. [0] 나이유미 2010-11-22 1998 0
475 SELECT() 사용 시 문제점 [2] 마냐 2010-09-16 2742 0
473 CI의 사용자 인증 소스파일 [2] corean 2010-09-12 3142 0
471 CI 1.7.2 한글 언어팩 1.1 [1] cleansugar 2010-08-26 2221 0
470 Upload 라이브러리 수정본 [0] sisco 2010-07-28 2398 0
464 iScaffold [4] 준이 2010-07-26 1981 0
458 이미지 등분하기_helper [0] 마냐 2010-06-18 2226 0