제목 | CodeIgniter에서 controller와 method명으로 php 언어 구조명 쓰기 | ||
---|---|---|---|
글쓴이 | 서치 | 작성시각 | 2010/05/27 01:26:41 |
|
|||
2007년 4월에 다음에 있는 개인 블로그에 쓴 글입니다.(퍼갈시 출처를 반드시 명기해주시기 바랍니다)
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 만큼은 좀 예외로 남겨두고 싶다.(할까..) |
|||
첨부파일 |
diff.txt.tar.gz (993 Bytes) |
||
다음글 | codeigniter 에서 Library 폴더를 서브 ... (3) | ||
이전글 | CodeIgniter로 만든 웹사이트.. (5) | ||
서치
/
2010/05/27 01:38:57 /
추천
0
|
jois
/
2010/05/30 15:42:19 /
추천
0
네, 전.. 아직도 PHP4 스타일에 맞게 코딩합니다~
아직도 php4인 곳에 적용해야 할일이 생기기 때문에... 물론 대부분의 경우 환경은 PHP5입니다.. 근데 어쩔 수 없이 저런 경우는 만들지 말아야겠지요;; 일종의 예약어일테니... |
__construct 인가요? 그걸 사용하기도 하더군요.
어디까지나 제가 2007년에 4 버전 가지고 통밥 굴릴때 이야기입니다.
여기에도 4버전 쓰시는 분 있나요?