本文讨论了编写和编写PHP代码的方法。通过分析现有的公司方法和个人经验可以得出以下几点。
文件和文件夹的命名规则
文件夹和文件的所有名称都应有意义且能说话(不需要其他说明)。
资料夹
所有文件夹都命名为小写字母,并使用-减号分隔单词。
如果文件夹包含与名称空间(名称空间)相关的类,则根据名称空间名称空间(名称空间)命名文件夹。
文件夹命名所允许的字符:拉丁字母和-减号。
档案
与项目相关的所有文件均以小写字母命名,并使用符号-(减号)进行单词分隔。
如果文件是类文件,则根据类名称进行命名。
命名空间,类,方法和变量的命名约定
所有名称都应有意义且能说话(不需要额外说明)。
命名空间
. , .
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 === '') {
}
在条件表达式中同时使用AND和OR运算符时,必须将方括号放在优先位置。