>  기사  >  백엔드 개발  >  PHP 코드 스타일 스타일 사양 공유

PHP 코드 스타일 스타일 사양 공유

小云云
小云云원래의
2018-03-05 10:30:424186검색

이 기사는 주로 PHP 코드 스타일 사양을 공유하므로 도움이 되기를 바랍니다.

1. 기본 계약

1. 소스 파일

(1), 순수 PHP 코드 소스 파일은 ; 소스 파일 인코딩 형식은 BOM이 없는 UTF-8 형식이어야 합니다.

(3), Unix LF(줄 바꿈)를 줄 종결자로 사용합니다.

(4), 소스 파일은 한 가지 유형의 선언만 만듭니다. 즉, 이 파일은 클래스를 선언하는 데 특별히 사용되며 해당 파일은 구성 정보를 설정하는 데 특별히 사용됩니다. 함께 쓰지 마세요.

2. 들여쓰기

탭 키를 사용하여 들여쓰기하세요. 탭 키는 공백 4개로 설정됩니다.

3줄

한 줄에 최대 120자까지 작성하는 것이 좋습니다. 이 숫자를 초과하는 경우 일반적으로 줄 바꿈하여 설정해야 합니다. 편집자.

//wo

가로 스크롤 및 세로 스크롤을 방지하는 기사를 추가하세요.

4. 키워드 및 True/False/Null

PHP 키워드는 소문자여야 하며 부울 값은 true, false, null도 소문자여야 합니다.

다음은 PHP의 "키워드"이며 소문자여야 합니다:

'__halt_compiler', 'abstract', 'and', 'array', 'as', 'break', 'callable', 'case ', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty' , 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach ', ' 함수', '전역', 'goto', 'if', '구현', 'include', 'include_once', 'instanceof', 'insteadof', '인터페이스', 'isset', 'list', 'namespace' , 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw ', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor'

5. Naming

(1) 클래스 이름에는 StudlyCaps를 사용하세요.

( 2) (클래스) 메소드 이름은 cameCase로 작성됩니다.

(3), 함수 이름은 소문자 + 밑줄로 작성됩니다. 예를 들어 function http_send_post()

(4), 변수 이름은 소문자로 작성됩니다. $userName과 같은 사례 작성

6. 함수 주석, 변수 주석 등의 코드 주석 태그

일반적으로 사용되는 태그에는 @package, @var, @param, @return, @author, @todo, @가 포함됩니다. throws

required phpDocument 태그 규칙을 준수하고 새 태그를 생성하지 마세요. 더 많은 태그를 보려면 phpDocument 공식 웹사이트

7을 확인하세요. 비즈니스 모듈

(1) 여러 데이터 테이블 업데이트/추가 작업이 관련된 경우 가장 바깥쪽 레이어 트랜잭션을 사용해야 합니다.

(2), 모델 계층은 간단한 데이터 테이블 쿼리만 수행합니다.

(3), 비즈니스 논리는 논리 계층에 균일하게 캡슐화됩니다. 컨트롤러는 URL 라우팅만 수행하므로 비즈니스 메서드로 호출하지 마세요

(5). where(), order() 및 ThinkPHP 프레임워크의 기타 모델 메서드와 같은 SQL 작업 문은 컨트롤러 계층에 나타날 수 없습니다.

즉, 다음과 같은 SQL 문이 나타나지 않습니다. D('XXX')->where()->order()->limit()->find(); (), order(),limit() 등 SQL 메소드는 모델 레이어와 비즈니스 레이어에만 나타날 수 있습니다!

2. 코드 스타일

1. 네임스페이스(Namespace) 및 가져오기(Use) 선언

텍스트로 간단히 설명하겠습니다.

네임스페이스 선언 뒤에는 빈 줄이 있어야 합니다.

모든 가져오기 (use) 선언은 네임스페이스(namespace) 선언 아래에 위치해야 합니다.
  1. 문에는 import(use) 키워드가 하나만 있어야 합니다.
  2. import(use) 선언 코드에는 공백이 있어야 합니다. 블록 뒤의 줄
  3. 코드를 사용하여 설명하세요.
  4. 네임스페이스 아래에 빈 줄을 놔두어야만 use를 사용할 수 있고, 다시 빈 줄을 두면 use를 사용할 수 있으며, class를 선언할 수 있습니다

    1

    2

    3

    4

    5

    6

    namespace LibDatabases // 아래에 공백이 있어야 합니다.

    class Mysql; {

    }

    1

    2

    3

    4

    5

    6

    7

    less Bar;

    use OtherVendorOtherPackageBazClass; // 아래에 빈 줄이 있어야 합니다

    class Mysql {

    }

    2. 클래스, 속성 및 메서드

    (1), 상속(확장) 및 구현(구현)은 클래스 이름과 같은 줄에 작성되어야 합니다.

    1

    2

    3

    4

    5

    6

    네임스페이스 LibDatabaes;

    class Mysql은 ParentClass를 확장하여 PDO, DB를 구현합니다. { //

    }

    (2) 속성은 공개, 보호 또는 비공개인지 여부를 선언해야 하며 var는 이전에 사용할 수 없습니다. PHP 버전은 어떤 방식으로 공개적으로 사용됩니까?

    1

    2

    3

    4

    5

    6

    7

    8

    네임스페이스 L ib 데이터베이스;

    class Mysql은 ParentClass를 확장합니다. 구현 PDO, DB { // 한 줄 쓰기

      public $foo = null;

    private $name = 'yangyi';

    protected $age = '17';

    }

    (3), 메소드는 공개 여부를 선언해야 하며, 공개, 보호, 비공개 여부를 생략할 수 없습니다. 매개변수가 여러 개인 경우 첫 번째 매개변수 뒤에 ","를 추가하고 공백을 추가합니다: function_name($par, $par2, $pa3) 매개변수에 기본값이 있는 경우 "의 왼쪽과 오른쪽에 공백으로 구분합니다. =".

    1

    2

    3

    4

    5

    6

    7

    8

    네임스페이스 L ib 데이터베이스;

    class Mysql은 ParentClass를 확장합니다. 구현 PDO, DB { // 한 줄 쓰기

    Public getInfo($name, $age, $gender = 1) { // 매개변수 사이에 공백이 있습니다. 기본 매개변수의 "=" 주위에 공백이 있고 )와 {

    }

    }

    (4) 사이에 공백이 있습니다. abstract와 final을 사용할 경우 클래스를 만들 때 선언의 경우 가시성 선언(공개, 보호 또는 비공개) 앞에 배치되어야 합니다. 클래스 선언에 static을 사용하는 경우 가시성 선언 뒤에 배치해야 합니다.

    코드로 직접 이동:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    < ;? php

    namespace VendorPackage;

    abstract class ClassName {

     protected static $foo; // static이 뒤에 배치됨

      abstract protected function zim();

    final public static function bar( ) { // final을 맨 앞에, static을 맨 뒤에 둡니다. + ~         ​

    3. 제어 구조

    스위치 등의 제어 인터페이스 이러한 유형의 작성 표준은 문제가 발생하기 쉬우므로 표준화해야 합니다.

    (1), if, elseif, else 작성 방법은 표준 코드로 가세요:

    1

    2

    3

    4

    5

    6

    7

    8

    if ($expr1) { // if와 (사이에 공백이 있습니다. )와 {

    } elseif ($expr2) { // elesif가 작성됩니다. 연속적으로 (,)와 { 사이에 공백이 있습니다

    } else { // else 왼쪽과 오른쪽에 공백이 있습니다

    }

    (2) , 스위치, 케이스 공백과 줄바꿈에 주의하거나 표준 코드로 바로 이동하세요:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    스위치 { // 스위치 사이에 공백이 있습니다. and (, 사이에 공백이 있습니다. ) 및 {

    case 0:

    echo '첫 번째 경우, 중단 있음'; // 정렬

    break; // 새 줄에 중단을 씁니다.

    사례 1:

    echo '두 번째 사례, 통과하는 경우';

    // 중단 없음 사례 2:

    사례 3:

    사례 4:

    echo '세 번째 사례, 중단 대신 반환' ;

                                                 반품;

    (3), while, do while도 비슷하게 작성됩니다. 위 코드는

    1

    2

    3

    4

    5

    6

    7

    8

    < ;?php

    while ($expr) { // while과 (, 사이에 공백이 있습니다) 및 {

    }

    do { // do와 사이에 공백이 있습니다 { Space

    } while ($expr); // while

    왼쪽과 오른쪽에 공백이 있습니다. (4)

    1

    작성 방법 2

    3

    4

    for ($i = 0; $i < 10; $i++) { // for와 ( 사이에 공백이 있고 이진 연산자로 둘러싸여 있음 " =", "<" 각각 공백이 있고, )와 {

    }

    사이에는 공백이 있습니다.

    (5), foreach

    1

    2

    3

    4

    foreach($key => $value로 $iterable) { / 작성 방법 / foreach와 ( 사이에 공백이 있고, "=>"의 왼쪽과 오른쪽에 공백이 있고, )와 {

    }

    (6) 사이에 공백이 있는데, 어떻게 쓰려면 catch

    1

    2

    3

    4

    5

    6

    7

    8

    try { // 시도 space on the right

    } catch (FirstExceptionType $e) { // catch와 (,) 사이에 공백이 있고 {

    } 사이에 공백이 있습니다. catch (OtherExceptionType $e) { // 거기 는 catch와 (,)와 { 사이에 공백이 있습니다. {

    }

    사이에 공백이 있습니다.

    4. 주석

    (1), 줄 주석

    // 뒤에는 공백이 와야 합니다.

    // 앞에 비어 있지 않은 문자가 있으면 // 앞에 공백이 와야 합니다. ;

    (2), 함수 설명

    매개변수 이름, 속성 이름 및 레이블의 텍스트는 위아래로 정렬되어야 합니다.

    첫 번째 레이블 앞에 빈 줄을 추가합니다.

    34 * 포맷터 옵션을 설명하기 위한 샘플 함수입니다.

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    /**

     * 추가 PHP

     *

     * @param        $one   첫 번째 매개변수

     * @param int    $two   두 번째 매개변수

     * @param string 세 번째 매개변수는 긴

     *                     줄바꿈을 설명하기 위한 주석입니다.

     * @return void

     * @author  phpgo.cnblogs.com

     * @license GPL

     */

    함수 foo($one, $two = 0, $3 = "문자열") {

    }

    5. 공백

    (1), 대입 연산자(=, += 등), 논리 연산자(&&, ||), 등호 연산자(==, !=), 관계 연산자(<, > , <=, >=), 비트 연산자(&, |, ^), 왼쪽과 오른쪽에 공백이 있는 커넥터(.)

    (2), if, else, elseif, while, do , there; 는 switch, for, foreach, try, catch, finally 등과 바로 왼쪽 대괄호 "(";

    (3) 사이, 쉼표(",") 뒤 함수와 메서드의 매개 변수 사이에 공백이 있습니다.

    6, 빈 줄

    (1), 모든 왼쪽 중괄호 {는 깨지지 않으며, 바로 아래의 {}는 빈 줄이 아니어야 합니다.

    (2), 동일한 수준 코드(들여쓰기됨) ), 주석 앞에 빈 줄이 있어야 합니다(줄 주석/블록 주석)

    (3), 각 메서드/함수 사이에 빈 줄이 있습니다.

    (4), 네임스페이스 문, use 문, clase 문 사이에 빈 줄이 있습니다.

    (5), return 문

    return 문 앞에 PHP 코드가 한 줄만 있으면 return 문 앞에 빈 줄이 필요하지 않습니다. return 문 앞에 최소한 두 줄의 PHP 코드가 있으면 return 문 앞에 빈 줄이 필요하지 않습니다.

    (5), if, while, switch, for, foreach, try 및 기타; 코드 블록, 다른 코드 블록 사이


    [참고 예시 요약]

    참고 1:

    1

    namespace LibDatabaes;

    class Mysql은 ParentClass Implements PDO, DB { // 한 줄 쓰기

    public getInfo($name, $age, $gender = 1 ) { // 기본 매개변수의 "=" 좌우에 공백이 있습니다. ,)와 {

    }

    }

    참고자료 2:

    2

    3

    4

    5

    6

    7

    8

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    namespace VendorPackage;

    abstract class ClassName {

     protected static $foo; // static은 뒤에 배치

        abstract protected function zim(); // abstract는 앞에 배치

    final  public static function bar() { // final을 앞에, static을 끝에 넣습니다. + ~         ​

    参考3:

    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

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    4 3

    44

    45

    네임스페이스 libraryModel;

     

    use libraryHelperImageHelper;

    use libraryLogicUserMainLogic;

     

    /**

    * 사용자 테이블 데이터 모델

    *

    * @package libraryModel

    */

    class UserMainModel은 BasicModel을 확장합니다.     /**

                                                   */

        공개 함수 getUserCard($userId) {

            $userId = intval($userId);

            return UserMainLogic::instance()->getUserCard($userId);

        }

     

        /*** ID를 기반으로 사용자 정보 가져오기* /

        공용 함수 getByUserId($userId = 0, $field = '*') {

            if (empty($userId)) {

               return array();

            }

     

            $where = 배열( 'id' =>  $userId);

            $info = $this->field($field)->where($where)->find();

     

            if (isset($info ['이미지']) && isset($info['sex'])) {

                $info['image'] = ImageHelper::GetImageUrl($info['image'], $info['sex']) ;

            }

     

            $info 반환;

        }

    }

    参考4:

    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

    $serv = 신규 swoole_server("127.0.0.1", 9502);

     

    // 서버 구성을 설정합니다. task_worker_num 구성을 0보다 크게 설정하여 작업 작업자 지원

    $serv->set(array('task_worker_num' => 4));

     

    // 위에서 설명한 receive 이벤트 핸들러를 연결합니다.

    $serv->on('receive', function($serv, $fd, $from_id, $data) {

        // $serv

    의 task() 메서드를 호출하여 작업 작업자에게 작업을 전달합니다.    // 이 메서드는 해당 작업의 ID로 작업 ID를 반환합니다

        $task_id = $serv->task($data );

        echo "Dispath AsyncTask: id=$task_idn";

    });

     

    // 작업 이벤트에 대한 핸들러를 연결하면 핸들러가 작업 작업자에서 실행됩니다.

    $serv->on( 'task', function ($serv, $task_id, $from_id, $data) {

        // 작업을 처리하고 $data

    로 원하는 작업을 수행합니다.    echo "New AsyncTask[id=$task_id]".PHP_EOL;

     

        // 작업 작업이 처리된 후 호출자 작업자에게 결과를 반환합니다.

        $serv->finish("$data -> OK");

    });

     

    // 종료 이벤트에 핸들러를 연결하면 핸들러는 서버 워커에서 실행되며, 이전에 이 작업을 파견한 동일한 워커입니다.

    $serv->on('finish' , 함수 ($serv, $task_id, $data) {

        echo "AsyncTask[$task_id] 마침: ​​$data".PHP_EOL;

    });

     

    $serv->start();

    요약: 모든 여는 중괄호 { 새 줄을 바꾸지 말고 { 바로 아래에 있는 줄은 빈 줄이 아니어야 합니다!

    위 코드 스타일 사양은 Java, JavaScript, Objective-C, Go! 등 개발 언어의 사양을 참조합니다!

    Java 언어는 중국 프로그래머에게 큰 영향을 미쳤으며 대부분의 사람들은 여전히 ​​왼쪽 중괄호 {를 새 줄 없이 두는 데 익숙합니다!

    작성 원리: 작은 모듈성을 잃지 않으면서 코드를 간결하게 만드세요!

    PSR-4 사양

    PSR-4 사양은 최근에 나온 새로운 사양으로, 자동 로딩(autoload)도 규제하는 사양입니다. 간단히 말하면 주요 내용은 다음과 같습니다.

      PSR-0에서는 _라는 디렉터리 구분 기호가 폐지되었습니다. 정규화된 클래스 이름에서는 _underscore가 특별한 의미가 없습니다.
    1. 클래스 파일 이름은 .php로 끝나야 합니다.
    2. 클래스명은 해당 파일명과 정확히 일치해야 하며, 대소문자도 정확히 동일해야 합니다.

    참조:

    코딩 스타일 연구: 왼쪽 중괄호가 새 줄에 들어가나요? ? ?

    PSR-[0-4] PHP의 코드 사양

    [보충] 배열 쓰기 형식

    키-값 쌍이 하나만 있는 경우 한 줄로 작성하세요:

    1 $where = array ('id' => 789);여러 개(2개 이상) 키-값 쌍이 있는 경우 줄 바꿈:

    1$where = array(

    관련 추천:

    ThinkPHP 3.2.3 페이지 매김 코드 스타일 공유

    PHP 코드 스타일

    코딩 표준에 관한 PHP 문서(컬렉션)

    2

    3

    4

    'id' => 789,

    'user_name' => 'phpgo'

    );

    위 내용은 PHP 코드 스타일 스타일 사양 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.