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
, .
:
- , ,
(isPostRequest
, getRequestType
, parseSchemaElement
, renderPageWithSetupsAndTeardowns
) boolean
is
, has
can
camelCase
. camelCase
, .
UPPER_CASE_SNAKE_CASE
. UPPER_CASE_SNAKE_CASE
, .
:
, ,
. Map
($typesMap
, $statesMap
), .. .
, (unpaidProject
)
, , (userIsAdmin
, messageIsSend
, figureCanBePainted
, projectName
)
, ,
:
$object->expire_at
$object->setExpireAt($date);
$object->getExpireAt();
:
$object->expiration_date;
$object->setExpirationDate($date);
$object->getExpirationDate();
boolean
is
, has
can
:
if ($project->isInvalid()) {
}
if ($project->isNotValid()) {
}
if ($accessManager->isAccessDenied()) {
}
:
if (!$project->isValid()) {
}
if (!$accessManager->isAccessAllowed()) {
}
if ($accessManager->canAccess()) {
}
( 8 ), : , ), (userHasRoleAdmin
, statusIsActive
)
(namespace), ( ). (use
).
{...}
. .
.
:
- .
- / â .
.
, .
.
.
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
. . .
. , :
- .
\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) {
}
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.