[킴스큐 Rb]킴스큐Rb 개발자를 위한 기초 활용노트 11 - 표준 코딩규칙
출처: http://www.kimsq.com/?m=forum&bid=devGuide&p=3&uid=18
킴스큐Rb에서는 php.ini 의 주요 설정값에 대해서 다음을 준수합니다.
resiter_globals = Off
allow_url_fopen = Off
short_open_tags = Off
이와같은 설정은 약식코딩에 익숙한 웹개발자들에게는 다소 번거롭게 생각될 수 있으나 표준을 지켜야만 IIS 나 Apache 등의 웹서버는 물론 php 버젼이나 설정에 상관없이 모든 환경에서 정상적인 동작이 보장됩니다.
따라서 킴스큐Rb 에서 동작하는 웹앱을 개발할 경우에는 반드시 위의 3가지 설정에 영향을 받지 않도록 개발해야 합니다.
특히 short_open_tags 는 무조건 Off 환경에 맞춰주셔야 합니다.
1. short_open_tags = On 에 맞춘 약식코딩
<?
$a = 1;
$b = 2;
$c = $a + $b;
?>
a+b는 <?=$c?> 입니다.
2. short_open_tags = Off 에 맞춘 표준코딩
<?php
$a = 1;
$b = 2;
$c = $a + $b;
?>
a+b는 <?php echo $c?> 입니다.
short_open_tags = Off 환경에서는 반드시 php는 <?php 로 시작해야하며 echo 를 = 과 같은 형식의 약식을 사용할 수 없습니다.
3. 실수하기 쉬운 것들
<?php
$array[constant] = '연관배열';
echo $array[constant];
?>
위의 코드는 매우 정상적인 것 같지만 완전히 잘 못된 표현입니다.
물론 일반적인 PHP환경에서는 특별한 에러메시지 없이 "연관배열" 이라는 문자열을 출력하겠지만 이러한 잘 못된 코드는 PHP엔진으로 하여금 안 해도될 작업을 시키게 합니다.
무엇이 잘 못 되었는지 알아볼까요?
$array 배열의 인수 constant 는 위의 표기에서는 "상수" 입니다.
즉, $array[constant] 는 constant 라는 상수의 존재여부를 먼저 찾게 된다는 것입니다.
그래서 constant 라는 상수가 존재하면 그 값을 대입할 것이고 존재하지 않는다는 것을 확인 한 후에는 문자열로 해석을 하게 될 것입니다.
그러면 왜 우리는 이런 부분을 놓쳐왔던 것일까요?
그 것은 PHP의 유연함에 기인하고 있습니다.
PHP는 어떤 스크립트 보다도 유연하기 때문에 왠만해선 별 에러없이 잘 실행을 해주기 때문입니다.
그러나 앞으로 PHP의 버젼이 올라가면 올라갈 수도록 보다 엄격한 해석을 하게 될 것이며 실제로 PHP의 최근버젼들에서 그러한 변화가 나타나고 있습니다.
그렇다면 위의 코드를 우리가 의도한 올바른 표현으로 바꿔보겠습니다.
<?php
$array['constant'] = '연관배열';
echo $array['constant'];
?>
이 경우 결과값은 동일하지만 PHP 해석기는 constant 가 상수가 아니라 "문자열" 이라는 것을 미리 알고 모든 상수중에 constant 를 찾아 헤매는 헛수고를 하지 않게 됩니다.
이와 관련하여 PHP입문자들 혹은 PHP를 많이 다뤄왔다고 하는 분들중에도 정확한 이해를 하지 못하고 습관처럼 사용하는 것들이 있습니다.
대표적인 것이 변수에 대한 쌍따옴표(") 와 홑따옴표(')의 사용에 대한 것입니다.
$string = "문자열";
$int = "1";
위의 변수표기는 매우 잘 못된 표현입니다.
올바른 표현은 다음과 같습니다.
$string = '문자열';
$int = 1;
정수형 변수를 정의하든 문자열변수를 정의하든 습관적으로 쌍따옴표를 사용하는 경우가 많은데 이 것은 반드시 당장 고쳐야 할 나쁜 습관입니다.
$string1 = '문자열1';
$string2 = "문자열2";
위의 두 문자열 변수는 동일할 것으로 짐작하기 쉽지만 완전히 다릅니다.
PHP해석기는 위의 두 변수를 메모리에 담을때 완전히 다른 작업을 하는데 첫번째 $string1 은 '문자열1' 이라는 문자열에 대해서 어떠한 작업도 없이 곧바로 $string1 변수에 담습니다.
그러나 $string2 는 상황이 다릅니다.
"문자열2" 에 변수나 상수가 포함되어 있는지를 먼저 찾아내는 작업을 수행합니다.
그리고 나서 변수/상수 값에 대한 치환작업을 한 후에야 그 결과값을 $string2 에 담습니다.
개발자의 잘 못된 습관으로 인해 PHP해석기에 쓸데없는 일을 시키는 좋지 못한 결과를 불러오고 있는 것입니다.
따라서 PHP개발자는 반드시 다음내용을 숙지하고 손끝에 익숙하도록 노력해야 합니다.
1. 변수를 정의할때 반드시 정확한 자료형을 사용한다.
2. 문자열 변수를 정의할때 "상수나 변수를 포함할 것으로 의도하지 않는한" 문자열은 무조건 홑따옴표로 감싸준다.
또 다른 한가지..
$var = " 문자열1 $other_var 문자열2";
위와 같은 표현도 자주 사용되는 것 중 하나입니다.
별 이상이 없어보이지만 좀더 올바른 표현은 다음과 같습니다.
$var = '문자열1 '.$other_var.' 문자열2';
왜 그런 것인지는 앞서 강조를 해 드렸으므로 이제 쉽게 이해하실 수 있을 것입니다.
PHP의 "유연함" 을 "쉬움" 으로 오판하지 말아야 하며 개발자는 자신의 편함을 위해서 잘못된 표현을 사용하지 말아야 합니다.
개발자는 언제나 "표준" 을 지켜야 후환(?)이 없습니다.
4. 파일은 반드시 UTF-8 로 저장합니다.
킴스큐Rb의 인코딩은 UTF-8 입니다.
따라서 모든 파일들은 반드시 UTF-8로 작성이 되어야 합니다.
기본인코딩인 ANSI 로 저장할 경우 한글이 모두 깨지게 되므로 주의하세요.
다음은 에딧플러스에서 파일저장시 UTF-8로 선택하는 화면입니다.