PHP代码样式约定

本文讨论了编写和编写PHP代码的方法。通过分析现有的公司方法和个人经验可以得出以下几点。


文件和文件夹的命名规则


文件夹和文件的所有名称都应有意义且能说话(不需要其他说明)。


资料夹


所有文件夹都命名为小写字母,并使用-减号分隔单词


如果文件夹包含与名称空间(名称空间)相关的类,则根据名称空间名称空间(名称空间)命名文件夹。


文件夹命名所允许的字符:拉丁字母和-减号。


档案


与项目相关的所有文件均以小写字母命名,并使用符号-(减号)进行单词分隔


如果文件是类文件,则根据类名称进行命名。


命名空间,类,方法和变量的命名约定


所有名称都应有意义且能说话(不需要额外说明)。


命名空间


. , .



PascalCase. PascalCase .


Trait. Interface. Abstract.



camelCase. camelCase , .


:


  1. , ,
    (isPostRequest, getRequestType, parseSchemaElement, renderPageWithSetupsAndTeardowns)
  2. boolean is, has can


camelCase. camelCase , .


UPPER_CASE_SNAKE_CASE. UPPER_CASE_SNAKE_CASE , .


:



  1. , ,



  2. . Map ($typesMap, $statesMap), .. .


  3. , (unpaidProject)


  4. , , (userIsAdmin, messageIsSend, figureCanBePainted, projectName)


  5. , ,


    :


    $object->expire_at
    $object->setExpireAt($date);
    $object->getExpireAt();

    :


    $object->expiration_date;
    $object->setExpirationDate($date);
    $object->getExpirationDate();

  6. boolean is, has can



  7. :


    if ($project->isInvalid()) {
        // ...
    }
    if ($project->isNotValid()) {
        // ...
    }
    if ($accessManager->isAccessDenied()) {
        // ...
    }

    :


    if (!$project->isValid()) {
        // ...
    }
    if (!$accessManager->isAccessAllowed()) {
        // ...
    }
    if ($accessManager->canAccess()) {
        // ...
    }

  8. ( 8 ), : , ), (userHasRoleAdmin, statusIsActive)




(namespace), ( ). (use).
{...}. .


.


:


  1. .
  2. / — .

.


, .


.


.


class InterfaceType {

    private $property = 'myProp';

    public function getProperty():string {
        return $this->property;
    }    
}

(return) , .


, () .


:


 if (IS_REGISTRATOR() && (($params.status === 'W' || $params.status === 'D' || $params.status === 'A') && $params.remark && (($params.subres_level == 0 && ($user_info->selected_title->tid == $params.boss || $user_info->selected_title->tid == $doc_signer_tid || !$params.usertid) || $params.subres_level > 0 && $user_info->selected_title->tid == $params.usertid))) { ... }

:


$docIsInWorkAcceptOrDraft = ...;
$bossHasSignerPriviledge = ...;
$userCanSign = ...;

if ($docIsInWorkAcceptOrDraft && $bossHasSignerPriviledge && $userCanSign) {
  // ...
}


( ""). , , .


, PHPDoc. - .


//, /*...*/.


, , .



, , declare(strict_types=1);


/ null. 0 .


function sendEmail(string $title, string $message = null, string $date = null): void {
    // ...
}

//    
$object->sendEmail('Title', null, '2017-01-01');

//    
$object->sendEmail('Title', '', '2017-01-01');

, ( — ).


. array_key_exists, isset. . .


. , :


  1. . \n, \r, \t ..


, (: type). PHPDoc. , c check validate, .


private. , protected. , public.


null, Null object, , (: ).


jsonreturn true, return ['success' => ['message' => '.....']] ['error' => ['message' => '.....']]. message , .


.


. . , .


boolean . boolean (===), .


:


if ($user) {
    // ...
}
if ($request->postData('amount') == 100) {
    // ...
}
if (!$request->postData('amount')) {
    // ...
}

:


if ($user === null) { // $user   object
    // ...
}
if ((int)$request->postData('amount') === 100) {
    // ...
}
if ($booking->comment === '') {
    // ...
} 

在条件表达式中同时使用AND和OR运算符时,必须将方括号放在优先位置。

Source: https://habr.com/ru/post/undefined/


All Articles