2011. 5. 18. 10:58

PHP 코딩 규칙 v1

개인적으로 사용하는 코딩규칙임
 

일반

PHP태그는 <?php ?> 형태로 한다. short open tag 허용 안함. (<? ?>)
<?php echo $var ?> 허용
<?=$var?> 불가
코드의 마지막이 PHP로 이루어져있을 경우 ?> 는 반드시 생략.

배열, 함수인자등 , 다음에는 반드시 공백을 넣을것.
array(1, 2, 3, 4);
function($a, $b, $c);

탭은 공백 4개 사용, 탭문자 사용 불허

파일인코딩

파일 저장 인코딩 방식은 기본 UTF-8 (BOM 없음)

클래스

Camel Case 방식 각단어의 첫글자는 대문자
예) class MyOwnClass

선언
class MyOwnClass {
}

메소드

Camel Case 방식 첫단어 소문자, 접근제한자(public, protected, private) 사용(PHP5)
예) public function myOwnMethod()

선언
public function myOwnMethod()  {
}

함수

C형태 함수 선언, 기존 함수체계와 유사성 유지
예) function my_function() 

선언
function my_function() {
}

상수명

대문자와 _ 만 사용
예) MY_CONSTANT

TRUE, FALSE, NULL 대문자 사용

변수명

소문자와 _ , 숫자 사용, GET Query시 URL을 소문자로 통일하기 위함
예) $my_vars

가변변수 사용시 {}를 사용, $$ 사용금지
${$var1} = 'value';

문자열

문자열 내의 변수 사용은 아래 형식만 허용
$var = "내 이름은 {$name}입니다.";
$var = '내 이름은'.$name.'입니다.';

DB

테이블 및 필드명은 소문자, _, 숫자를 사용
- 오라클,MSSQL 및 몇몇 DB 라이브러리의 경우 일괄적으로 대/소문자만으로 변환되어 사용되어
  혼란이 야기됨
예) ORACLE은 기본적으로 대문자를 사용하므로 Camel Case로 만들경우 구분이 어려움
예) MSSQL은 대소문자 구분하지 않으나 PHP에서는 배열index의 대소문자를 구분하므로 혼란스러움

DB예약어는 대문자, 필드/테이블/뷰등 사용자가 정의한 object는 소문자를 사용
짧은 쿼리
$query = "SELECT field FROM table WHERE field=1";
긴쿼리
$query = "SELECT field, field, field "
               ."FROM table "
               ."WHERE field = 1";

배열

배열 값후에 , 뒤에는 반드시 공백을 포함하도록 함
 
$ar = array(1, 2, 3, 4);
배열값을 여러줄로 나눌경우 ,는 값 뒤쪽에 위치하도록 함
$ar = array(
          1,
          2,
);

배열선언시 아래와 같은 형태로만 선언할 것
한줄
$ar = array(1, 2, 3, 4);

여러줄
$ar = array(
          1,
          2,
);

$ar = array(
          'key1' => 'value1',
          'key2' => 'value2'
);

명령구문 중간에서 여러줄 배열 선언시 
$aa = implode('-',array(
                                     1, 2, 3,
                                     4, 5, 6, 3
                                     ));
$aa = implode('-',array(
                                     'key1' => 'value1',
                                     'key2' => 'value2'
                                     ));

FOR문 사용

반복 조건문에서 함수를 사용할 경우 반드시 변수 초기화 할때 함수의 값을 저장해서 사용
for($i=0, $cnt=count($row); $i<$cnt; $i++) {
}

블럭

모든 블럭은 명령어 바로 다음에 위치하도록 함
if() {
}

while() {
}

IF ELSE

if문에 else가 필요할 경우 블럭 다음줄에서 시작함(블럭 인식이 편함)
if(조건) {

else {
}

elseif 는 사용하지 말고 else if를 사용함(몇몇 언어에서 elseif 지원안함 - javascript)
if(조건) {
}
else if(조건) {
}
else {
}

Switch

탭으로 들여쓰기해야 하며 default 구문은 반드시 포함되어야 함
switch(조건) {
    case 1 :
        //문장
        break;
    defualt :
        //문장
}

주석문

파일 상단, 클래스 상단, 메소드(함수) 상단에 PHPDoc 형태의 주석을 반드시 포함
/**
 * 
 * Enter description here ...
 * @author wyseburn
 *
 */

함수(메소드)내부, 프로그램 상에서는 단행 주석문 // 만 사용

PHP기타

불필요한 quote(', ") 사용금지
echo "$var";
$var = "$var1";

php.ini 설정
register_global = off

mysql 관련 함수
pdo 또는 mysqli 계열 함수만 사용할 것(pdo 추천)

PHP5.3에서 deprecated 된 함수 사용금지(PHP 6.0에서 완전히 제거될 예정임)
http://kr.php.net/manual/en/migration53.deprecated.php

디렉토리구조

외부노출 안되는 디렉토리에 _ 사용
_lib : 라이브러리(함수,클래스)
_model : 모델
_view : 뷰
public/뷰명/img : 이미지
public/뷰명/css : 개별 css
public/뷰명/js : 개별 js
디렉토리 : 일반/컨트롤러 디렉토리

파일명

외부 노출 안되는 파일명에 접두어 사용
func.파일명.php : 함수
class.파일명.php : 클래스
inc.파일명.php : 인클루드되는 파일
ajax.파일명.php : ajax호출파일
파일명_파일명.php : 주체(그룹)_동작(동사)_유형.php - 유형생략가능