한줄로 코딩한다거나, 들여쓰기를 안한다거나, 붙여쓴 코드는 알아보기 어렵다는 것을 다들 알고 있습니다.
그렇다고 규칙없이 띄어써도 코드 관리는 힘들어집니다.
아래 규칙을 지키면서 코딩을 하면 나중에 유지보수를 하기 쉽다는 것을 금방 느낄 수 있을 것입니다.
들여쓰기와 줄 길이
공백 4개의 들여쓰기를 사용하되 탭은 사용하지 않습니다.
탭 대신 공백을 사용해야 글씨체에 상관없이 일정하게 보입니다.
(개인이 같은 에디터 툴, 폰트를 사용한다면 탭을 사용해도 상관 없습니다만 소스 코드 공유, 호환을 위해 공백을 사용하는 것을 권장합니다.)
제어 구조
제어 구조에는 if, for, while, switch 등이 있습니다. 아래는 if 예제입니다.
<?php
if ((condition1) || (condition2)) {
action1;
} elseif ((condition3) && (condition4)) {
action2;
} else {
defaultaction;
}
?>
제어 구조에서는 함수 호출과 구별하기 위해서 키워드와 ( 사이에 공백을 1개 둡니다.
블록을 감싸는 { 는 끝에 입력합니다. 또한 아래와 같이 블록 내용이 한줄이라도 { 로 감싸는 것이 좋습니다.
if(condition)
action1;
이 아닌
if(condition) {
action1;
}
으로 입력합니다.
switch 문장의 경우는 다음과 같이 합니다.
<?php
switch (condition) {
case 1:
action1;
break;
case 2:
action2;
break;
default:
defaultaction;
break;
}
?>
함수 호출
함수명과 (및 최초의 파라미터 각각의 사이에는 공백을 두지 않고, ,(쉼표)와 파라미터 사이에는 공백을 두며, 마지막 파라미터와 ) 및 ; 사이에는 공백을 두지 않습니다.
<?php
$var = foo($bar, $baz, $quux);
?>
위와 같이 함수의 리턴 값을 변수에 대입할 때에 사용하는 =(등호)의 좌우에는 공백을 1개씩 둡니다. 아래와 같이 관련된 문장은 가독성을 향상시키기 위해 여러 공백을 두면 좋습니다.
<?php
$short = foo($bar);
$long_variable = foo($baz);
?>
함수 정의
함수 정의는 아래와 같이 "one true brace" 로 불리는 표기에 따릅니다.
<?php
function fooFunction($arg1, $arg2 = '')
{
if (condition) {
statement;
}
return $val;
}
?>
기본값을 가지는 인수는 목록의 마지막에 둡니다. 특별한 경우를 제외하고는 함수가 리턴값을 돌려주도록 합니다. 아래 예제를 봅시다.
<?php
function connect(&$dsn, $persistent = false)
{
if (is_array($dsn)) {
$dsninfo = &$dsn;
} else {
$dsninfo = DB::parseDSN($dsn);
}
if (!$dsninfo || !$dsninfo['phptype']) {
return $this->raiseError();
}
return true;
}
?>
주석
주석 기호는 C언어 형식의 /**/ 와 표준 C++ 주석인 //를 사용합니다.
Perl 형식의 #는 사용하지 않습니다.
<?php
/* comment */
/**
* comment
*
* comment
*
* comment
* comment
*/
// comment
?>
코드 연결
어디든지 클래스 파일을 무제한으로 연결을 하려면 require_once를 사용합니다.
팩토리 메소드등의 클래스 파일을 제한적으로 연결하려면 include_once를 사용합니다.
어디든 클래스 파일을 오직 한번만 연결하게 될 것입니다. 같은 파일을 공유하므로 중복될까봐 걱정하지 않아도 됩니다. require_once로 연결된 파일은 include_once에 의해 다시 연결되지 않을 것입니다.
PHP 코드 태그
PHP 코드 범위는 항상 <?php ?>을 사용합니다. <? ?>같은 짧은 태그는 안됩니다.
그래야 다른 운영체제와 환경에서도 PHP 코드를 옮겨 사용할 수 있습니다.
헤더 주석 블록
주석의 자세한 설명은 생략
명명
클래스에는 내용을 이해할 수 있는 이름을 지정해야 합니다. 단축어의 사용은 가능한 한 피합니다. 클래스명은 항상 대문자로 시작해야 합니다. 상위 클래스의 확장 클래스는 _(언더 스코어)로 연결 합니다. 아래는 클래스 명의 예제입니다.
Log
Net_Finger
HTML_Upload_Error
함수와 메소드
함수와 메소드는 "studly caps" 형식을 사용해 이름을 붙여야 합니다. 함수는 패키지 이름의 충돌을 피하기 위해서 접두사로 패키지명을 추가해야 합니다. 이름의 첫글자는 소문자로, 새로운 단어를 시작할 때의 각 첫글자는 대문자로 합니다. 아래 예제가 있습니다.
connect()
getData()
buildSomeWidget()
XML_RPC_serializeData()
내부에서 사용되는 클래스 멤버는 _(언더 스코어) 1개를 앞에 붙입니다. 아래 예제가 있습니다.
_sort()
_initTree()
$this->_status
상수
상수는 항상 모두 대문자로 단어의 끝에는 _(언더 스코어)를 사용해야 합니다. 예를 들면 DB:: 패키지로 사용하는 상수는 모두 DB_ 로 시작합니다.
주의: true, false 및 null 은 예외로, 항상 소문자여야 합니다.
상수 정의 예제
define('ROOT_DIR', './');
전역 변수
패키지에서 전역 변수를 정의할 필요가 있는 경우, 그 이름은 _(언더 스코어)를 앞뒤에 붙인 패키지명으로 시작해야 합니다. 예를 들면, PEAR 패키지는 $_PEAR_destructor_object_list 이라는 이름 의 전역 변수를 사용합니다.
정의되어 있는 전역 변수 예제
$_COOKIE
$_SERVER
$_REQUEST
파일 형식
아스키 텍스트로 저장 합니다.
ISO-8859-1 문자 인코딩을 사용합니다.
PHP 태그를 닫는 ?> 아래에 1개의 줄이 있어야 합니다.
에러 처리
PHP를 실행하면 예기치 않은 에러가 발생할 수 있습니다. 어떤 에러가 왜 발생했는지 알기 위해 에러 처리 코드를 삽입합니다. 아래는 오류발생시 메시지를 보여주는 예제입니다.
<?php
function connectDB($dsn) {
$this->db =& DB::connect($dsn);
if (DB::isError($this->db)) {
throw new Example_Datasource_Exception(
"$dsn에 연결할 수 없습니다:" . $this->db->getMessage()
);
}
}
?>
원문: http://pear.php.net/manual/en/
번역: © simulz