음... php에서 define 으로 설정한 값을 불러올 때 같지않은 이유
본문
/shop 으로 접속하지 않아도 쇼핑몰을 메인으로 쓰기 위한 방법으로
G5_COMMUNITY_USE 를 fasle 선언한 뒤
root 에 있는 head.php, index.php, tail.php 파일에다가
G5_COMMUNITY_USE === false 일 경우 shop 디렉터리에 있는 shop.head.php, index.php, shop.tail.php 를 불러오도록 설정을 하잖아요...
저 방법을 몇년동안 써왔는데 이제서야 궁금해진 부분이 생겨서 질문 드립니다....
G5_COMMUNITY_USE 도 config.php 에다가 define('G5_COMMUNITY', false); 로 세팅을 하는데
여기서!! 메인과 서브를 구분할 때 쓰는 조건문은 !defined('_INDEX_') 기면 서브 아니면 메인 으로 처리가 되던데
if( !defined('_INDEX_') ) {
// 메인이 아닐 경우 불러올 소스
// 여기서는 실행이 됨
}
if( !defined('G5_COMMUNITY_USE') ) {
// G5_COMMUNITY_USE 가 false 일 경우 불러올 소스
// 이건 실행이 안됨
}
if( G5_COMMUNITY_USE === false ) {
// 로 해야 실행이 됨
조건 처리할 때 똑같은 정의를 내렸는데 불러올 떄는 왜 2개가 다른지 궁금합니다....;;
ps. 개발자가 아니어서 어렵게 알려주시면 못알아들을지도...ㅋㅋㅋ;;
!-->답변 1
defined는 값을 비교하는 함수가 아니라 해당 상수가 선언 되었는지 아닌지를 판별하는 함수입니다
즉, G5_COMMUNITY_USE값이 어떤가는 상관없고, define("G5_COMMUNITY_USE", "false")
식으로 문서에 선언이 되어있으면 defined에서는 해당 상수가 존재하니, true를 리턴합니다.
다만 !가 붙어있으니 true가 false로 리턴이 되고, 해당 if문 안의 구문들은 실행되지 않습니다.
G5_COMMUNITY_USE === false
해당 비교문은 G5_COMMUNITY_USE의 상수에 false란 값이 들어가있냐 아니냐를 묻고, 그에 따라 true, false를 리턴합니다.
그누보드 index.php에서는 최상위 상단에 define으로 _INDEX_ 상수가 선언되어있으며, 다른페이지에는 존재하지 않는 상수입니다.
해당 상수가 없는 페이지(index 페이지가 아닌) 페이지는 해당 상수의 존재로 구분할 수 있습니다