php 代码风格дляPHP-классов

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 代码风格дляPHP-классов相关的知识,希望对你有一定的参考价值。

<?php

namespace App\Service\SomeService;

// [CODE STYLE COMMENT] Обязательно отступ между namespace и use statements, use statements без пробелов, регулярно удаляем найденные не используемые use statements.
use App\Service\Helpers\StringHelper;
use Doctrine\ORM\EntityManagerInterface;

/** 
 * [CODE STYLE COMMENT] По необходимости добавляем описание классов.
 * Делает то-то.
 */
class SomeService
{
    // [CODE STYLE COMMENT] Сначала идут константы.
    const SOME_CONST = 'boolean';

    // [CODE STYLE COMMENT] Затем поля без промежутков в виде пустых строк, в порядке: public protected private.
    private $stringHelper;
    private $entityManager;
    // [CODE STYLE COMMENT] Допустимо, а иногда даже желательно, указывать тип переменной.
    /** @var FileSystemHelper */
    private $fileSystemHelper;

    // [CODE STYLE COMMENT] Затем конструктор
    public function __construct(
        StringHelper $stringHelper,
        EntityManagerInterface $entityManager
    )
    {
        $this->stringHelper = $stringHelper;
        $this->entityManager = $entityManager;
    }

    // [CODE STYLE COMMENT] Затем PUBLIC методы. Максимально где это можно указываем PHP-doc и входных и выходного параметра.
    /** 
     * Делает то-то.
     * @param string $someString - То-то.
     * @return string - Сё-то.
     */
    public function someMethod(string $someString) : string
    {
        return 'example';
    }

    // [CODE STYLE COMMENT] Если название метода + параметры не помещаются на одной строке до раграничителя в IDE,
    // [CODE STYLE COMMENT] то переносим каждый параметр на каждую строку.
    public function someMethodWithVeryLongNameExampleAzazaOlolo(
        string $table,
        array $fields,
        array $arraysWithValues,
        array $fieldTypes = []
    ) : string
    {
        // [CODE STYLE COMMENT] То же самое с методами, но не обязательно для каждого параметра отдельную строку,
        // [CODE STYLE COMMENT] главное - читаемость, можно так:
        return $this->generateMultipleInsertQueryByTemplate(
            'INSERT IGNORE INTO {table} {fields} VALUES {values};',
            $table, $fields, $arraysWithValues, $fieldTypes
        );
    }

    // [CODE STYLE COMMENT] Затем PROTECTED методы.

    // [CODE STYLE COMMENT] Затем PRIVATE методы.
    private function function functionWithCode() : void
    {
        // [CODE STYLE COMMENT] Делаем функции минимального размера, чтобы она делала ровно то, как была названа.
        // [CODE STYLE COMMENT] Код пишем слитно, не нужно отделять пустыми строками, но разрешаются комменты,
        // [CODE STYLE COMMENT] визуально отделяющие логические блоки кода друг от друга. Но лучше разбить на отдельные функции.
        for ($i = 0; $i < 10; $i++) {
            if ($a != $b) {
                break;
            }
        }
        // [CODE STYLE COMMENT] Перед использованием переменной впервые - явно объявляем её с указанием default value.
        // [CODE STYLE COMMENT] Допустимо змеевидная инициализация, но только для логически схожих параметров.
        $varA = $varB = $varC = null;
        $total = 0;
        foreach ($arrayOfArrays as $key => $array) {
            foreach ($array as $value) {
                $total += $value;
            }
        }
        $b = $a + 5;
        // [CODE STYLE COMMENT] Желательно не допускать сложных вложенных условий, но ради примера приведу.
        if ($b > 10) {
            // [CODE STYLE COMMENT] Порядок аргументов в if: сначала что сравнивается, затем с чем сравнивается, но не наоборот: ('some' != $code).
            if ($code != 'some') {
                return true;
            }
        } else if (true != false) {
            // ...
        } else {
            // ...
        }
    }

    // [CODE STYLE COMMENT] Затем ABSTRACT методы (тоже в порядке abstract public, abstract protected, abstract private).
}
// [CODE STYLE COMMENT] Обязательно последняя строка в файле - пустая (то-есть файл не должен заканчиваться на "}").

以上是关于php 代码风格дляPHP-классов的主要内容,如果未能解决你的问题,请参考以下文章

php Двациклавнутри1гослайдераforeachinforобверткадлядвухцикловслайдыдлядвухциклов

php ACF的Парсингивыводполяссылки

php Вебсерверсклоненияпопадежамсловрусскихслов

php Создадимполедляуказаниясколькозаписейвыводитьврубрикахпроизвольноготипазаписи

php Удалениеверсийдляфайловстилейискриптов

php поделитьсяссылкойвтелеграм