Convenções de estilo de código PHP

Este artigo discute uma abordagem para escrever e escrever código PHP. Os seguintes pontos foram formados analisando as abordagens existentes da empresa e a experiência pessoal.


Regras para nomear arquivos e pastas


Todos os nomes de pastas e arquivos devem ser significativos e falantes (sem exigir explicações adicionais).


Pastas


Todas as pastas são nomeadas em minúsculas com separação de palavras usando o -sinal de menos.


Se a pasta contiver classes que pertencem ao espaço para nome (espaço para nome), a pasta será nomeada de acordo com o espaço para nome (espaço para nome).


Caracteres permitidos para nomear pastas: letras latinas e um -sinal de menos.


arquivos


Todos os arquivos relacionados ao projeto são nomeados em letras minúsculas com separação de palavras usando o símbolo -(menos).


Se o arquivo for um arquivo de classe, ele será nomeado de acordo com o nome da classe.


Convenções de nomenclatura para namespaces, classes, métodos e variáveis


Todos os nomes devem ser significativos e falantes (sem exigir explicações adicionais).


Namespaces


. , .



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 === '') {
    // ...
} 

Ao usar os operadores AND e OR ao mesmo tempo em uma expressão condicional, é necessário dar prioridade aos colchetes.

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


All Articles