일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- python
- 핑
- sendmail
- php
- 포트
- port
- 트랜젝션
- 이메일주소
- codeigniter
- 더존ERP
- ping
- 리눅스
- js
- 자바스크립트
- MYSQL
- MSSQL
- erp
- pingtest
- JavaScript
- jquery
- 목차만들기
- 핑테스트
- vscode
- 유효성
- 문자열
- sp_who
- 정규식
- 메일
- crontab
- 정규표현식
Archives
- Today
- Total
ioerror
Coding Convention 본문
반응형
참고자료
https://www.joinc.co.kr/w/man/12/php/PSR
https://github.com/yujineeee/clean-code-php
https://modernpug.github.io/php-the-right-way/
https://docs.phpdoc.org/latest/guides/docblocks.html
<?php
/**
* 기본적으로 phpDocumentor 의 주석 규칙을 따른다.
* @link https://docs.phpdoc.org/latest/references/phpdoc/index.html
* php 파일의 시작은 <?php 로 시작한다.
* php 파일의 끝이 php 코드가 마지막이면 ?> 로 닫지 않아도 된다.
* 파일의 첫번째 주석은 해당 파일의 설명을 기록한다.
*/
/** @var 와 같이 phpDoc의 태그가 들어가는 한 줄 주석은 여러줄 주석 형식으로 한다. */
/** @link https://docs.phpdoc.org/latest/glossary.html#term-phpdoc */
// 태그가 들어가지 않는 주석을 슬래시 2개로 한다.
/**
* phpDoc 태그 목록은 아래의 주소를 참고 한다.
* @link https://docs.phpdoc.org/latest/references/phpdoc/tags/index.html
* @link https://docs.phpdoc.org/latest/guides/docblocks.html#list-of-tags
*/
/**
* 아래부터는 php 코드를 통한 예시이다.
*
* 가상의 회원관리 클래스를 예를 들어 주석 및 코딩규약을 설명한다.
* 이 주석은 php 문서의 첫 부분에 위치하여 문서를 설명하는 것이다.
*
* @package ZOO
* @author Dev Team
* @since 2020-02-01 마지막 수정일과 간단한 수정 내용 및 목적
*/
/**
* 네임스페이스는 PSR-4를 따른다.
* @link https://psr.kkame.net/accepted/psr-4-autoloader
* \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
*/
namespace Member
/**
* 상수는 대문자의 스네이크케이스를 사용한다.
* php7에서는 define("TBL_MEMBER", array(...)); 형식으로도 사용 가능하다.
* 짧은 배열선언도 가능하다 const ARR = [....]
* 상태를 나타내거나 비교가 되는 값은 가급적 상수로 선언하는 것이 좋다.
*/
define("TBL_MEMBER","member");
const MEMBER_FIELDS = array(
"mem_pk"
,"mem_id"
,"mem_nm"
);
const LOGIN_STAT = true;
/**
* 클래스 등의 맴버변수를 제외한 일반 변수는 소문자의 스네이크케이스를 사용한다.
*/
$mem_nm = "test";
/**
* 구조적요소(Structural Element)의 중괄호는 한줄 내림한다.
* 구조적요소 : class, interface, abstarct, trait, function, property, constant
* 인터페이스 및 추상화는 접미사로 각각 Insterface, Abstract를 추가한다.
*/
interface MemberInterface
{
/**
* 인터페이스 및 클래스의 메소드와 일반 함수는 소문자로 시작하는 카멜케이스를 사용한다.
* 맴버함수의 반환값 자료형을 명시한다.
*/
public function loginStat(): bool;
/**
* 메소드, 함수의 인자값은 자료형을 명기한다.
*
* @param int $mem_pk 회원 PK
* @param string $mem_nm 회원 ID
*
* @return array 회원 정보
*/
public function memberInfo(int $mem_pk, string $mem_id = null): array;
public static function myInfo(): array;
}
namespace Member
/**
* 인터페이스 선언되어 있으면 구현을 하라... 뭔 개소리야?
*/
class Member implements MemberInterface
{
/**
* 로그인 여부.
*
* @var bool
*/
public $loginStat = false;
/**
* 맴버변수와 맴버함수(메소드)는 소문자로 시작하는 카멜케이스를 사용한다.
*
* @var array
*/
public $memberInfo = array();
/**
* 맴버변수는 객체외에서 바로 접근하도록 하지 않는다(캡슐화)
*
* @var array
*/
private static $myInfo = array();
/**
* 클래스 맴버 상수
*/
const IAM_MANAGER = 1;
const LOGIN_STAT_OK = true;
/**
* 생성자
*
* @param array $config
*/
public function __construct($config)
{
}
/**
* 로그인 여부를 반환하는 메소드
* 반환 값의 형식을 표기할때는 콜론과 공백 다음에 자료형을 표기한다.
*
* @return bool
*/
public function loginStat(): bool
{
/**
* 모든 제어문의 중괄호는 같은 라인에 입력한다.
* else if 대신 elseif 를 사용한다.
* else와 중괄호 사이에는 공백을 입력한다.
* 한줄에 많은 조건을 표기하기 어려우면 여러줄로 나누어 표기 가능하되 논리 연산자는 앞에 둔다.
*/
if ($this->loginStat === self::LOGIN_STAT_OK){
return $this->loginStat;
} elseif (
$this->loginStat === self::LOGIN_STAT_OK
&& LOGIN_STAT === false
)
{
return $this->loginStat = false;
} else {
if($this->myInfo['mem_level'] === self::IAM_MANAGER){
$this->myInfo['iam_manager'] = self::IAM_MANAGER;
)
return $this->loginStat;
}
/**
* @todo 추가해야할 코드를 todo 키워드로 입력 가능하다.
*/
$loginchk = true;
/**
* 삼항연산자는 연산자별로 띄어쓰기를 한다.
*/
return $this->loginStat = $loginchk === true ? true : fase;
}
/**
* 메소드, 함수의 인수는 자료형을 가급적 명시한다.
* 여러개의 인수들 사이는 콤마와 공백으로 표기한다.
* 인수를 포함한 스코프 변수는 자료형을 접두어로 하는 소문자 스네이크 케스를 사용하낟.
*/
public function memberInfo(int $int_mem_pk, array $arr_mem_info): array
{
$arr_mem_info = Array();
$str_mem_nm;
for( $i = 0 ; $i < 10 : $i++ ){
}
}
/**
* 여러개의 인수가 여러줄로 표기할 경우
* 한번의 들여쓰기를 하고 함수명괄호(소괄호)와 스코프(중)괄호를 같은 줄에 표기한다.
* 반환값의 형선언이 있으면 그 사이에 표기한다.
* nullable type 선언시 ?과 자료형 사이는 공백이 없어야 한다.
*/
public function multiLineArgs(
int $arg1,
?string $arg2
): ?string {
return $arg2 ? $arg1 : $arg2;
}
}
반응형
'개발이야기' 카테고리의 다른 글
VSCode 자주 사용하는 단축키 - 커서 이동, 선택, 복사 (0) | 2021.05.22 |
---|---|
자주 사용하는 VSCODE 확장 플러그인 (0) | 2021.05.19 |
[공통] 코딩컨벤션 (Coding Convention) (0) | 2019.12.01 |
코딩컨벤션 (Coding Convention) (0) | 2019.11.22 |
Comments