Conventions de style de code PHP

Cet article décrit une approche pour écrire et écrire du code PHP. Les points suivants ont été formés en analysant les approches existantes de l'entreprise et l'expérience personnelle.


RĂšgles pour nommer les fichiers et les dossiers


Tous les noms de dossiers et de fichiers doivent ĂȘtre significatifs et parlants (ne nĂ©cessitant pas d'explication supplĂ©mentaire).


Dossiers


Tous les dossiers sont nommés en minuscules avec séparation des mots à l'aide du -signe moins.


Si le dossier contient des classes liées à l'espace de noms (espace de noms), le dossier est nommé en fonction de l'espace de noms de l'espace de noms (espace de noms).


CaractÚres autorisés pour nommer les dossiers: lettres latines et -signe moins.


Des dossiers


Tous les fichiers liés au projet sont nommés en minuscules avec séparation des mots en utilisant le symbole -(moins).


Si le fichier est un fichier de classe, il est nommé en fonction du nom de classe.


Conventions de dénomination des espaces de noms, classes, méthodes et variables


Tous les noms doivent ĂȘtre significatifs et parlants (ne nĂ©cessitant pas d'explication supplĂ©mentaire).


Espaces de noms


. , .



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, , (: ).


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

Lorsque vous utilisez les opĂ©rateurs ET et OU en mĂȘme temps dans une expression conditionnelle, il est nĂ©cessaire de donner la prioritĂ© aux crochets.

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


All Articles