ioerror

[공통] 코딩컨벤션 (Coding Convention) 본문

개발이야기

[공통] 코딩컨벤션 (Coding Convention)...

반응형

클래스

클래스명은 첫번째 문자는 대문자인 카멜케이스로 한다.

예 : HelloWorld

 

함수(메쏘드, 맴버함수)

소문자로 시작하는 카멜케이스를 사용한다.

예 : goLoginForm()

 

변수

맴버변수인 경우 소문자로 시작하는 카멜케이스,

일반 변수인 경우 소문자의 스네이크케이스를 사용한다.

예 : stLogin

예 : st_login

 

상수

대문자로만 이루어진 스네이크케이스를 사용한다.

예 : TABLE_MEMBER

 

<?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 = false;
/**
* 클래스 등의 맴버변수를 제외한 일반 변수는 소문자의 스네이크케이스를 사용한다.
*/
$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
	*/
	public static $myInfo = array();

	/**
	* 생성자
	*
	* @param array $config
	*/
	public function __construct($config)
	{
	}

	/**
	* 로그인 여부
	*
	* @return bool
	*/
	public function loginStat(): bool
	{
		/**
		* 모든 제어문의 중괄호는 같은 라인에 입력한다.
		* else if 대신 elseif 를 사용한다.
    	* else와 중괄호 사이에는 공백을 입력한다.
		* 한줄에 많은 조건을 표기하기 어려우면 여러줄로 나누어 표기 가능하되 논리 연산자는 앞에 둔다.
		*/
		if ($this->loginStat === true){
			return $this->loginStat;
		} elseif (
				$this->loginStat == true
				&& LOGIN_STAT === false
		)
		{
			return $this->loginStat = false;
		} else {
			return $this->loginStat;
		}

		/**
		* @todo 추가해야할 코드를 todo 키워드로 입력 가능하다.
		*/
		$loginchk = true;

		/**
		* 삼항연산자는 연산자별로 띄어쓰기를 한다.
		*/
		return $this->loginStat = $loginchk === true ? true : fase;
	}
	
	public function memberInfo(): array
	{
	}
}
반응형
Comments