Ответ
Да, в моих проектах мы строго придерживались стандартов PSR (PHP Standards Recommendations) и внутренних правил команды.
Основные применяемые стандарты:
- PSR-12 (Extended Coding Style Guide): Определял форматирование (отступы в 4 пробела, размещение фигурных скобок, переносы строк, пробелы вокруг операторов).
- PSR-1 (Basic Coding Standard): Задавал базовые правила, такие как использование только
<?phpи<?=тегов, именование классов и методов. - PSR-4 (Autoloading Standard): Регламентировал структуру пространств имен и автозагрузку классов, что было критически важно в наших проектах на Laravel и Symfony.
Пример кода, соответствующего этим правилам:
<?php
declare(strict_types=1);
namespace AppServicesPayment;
use AppContractsPaymentProcessorInterface;
use AppDTOPaymentDetails;
use AppExceptionsPaymentFailedException;
class StripePaymentService implements PaymentProcessorInterface
{
private float $commissionRate;
public function __construct(float $commissionRate = 0.02)
{
$this->commissionRate = $commissionRate;
}
public function process(PaymentDetails $details): string
{
$amountWithCommission = $details->amount * (1 + $this->commissionRate);
// ... логика интеграции со Stripe API
return $this->chargeCustomer($details->token, $amountWithCommission);
}
}
Дополнительно мы использовали:
- PHP_CodeSniffer с правилами
PSR12для автоматической проверки стиля в CI/CD. - PHPStan / Psalm для статического анализа типов.
- Единый стиль PHPDoc-комментариев для документирования методов.
Ответ 18+ 🔞
Слушай, а про эти ваши стандарты я вообще отдельную песню могу спеть, ёпта. Это ж как в армии устав — вроде и ебёт мозг иногда, но без него — пиздец и бардак полный. Мы тоже за ними следили, как за своим последним рублём.
Какие конкретно правила в ходу были:
- PSR-12 (Extended Coding Style Guide): Это типа наш главный свод законов. Четыре пробела вместо табов, фигурные скобки на новой строке, пробелы вокруг точек и операторов — всё по струнке. Сначала бесило, конечно, но потом привыкаешь, и код читается, как хорошая книга, а не как записки сумасшедшего.
- PSR-1 (Basic Coding Standard): Ну, это база, детский сад. Только
<?php, классы с большой буквы, методы в camelCase — кто этого не соблюдает, тот, прости, манда с ушами. - PSR-4 (Autoloading Standard): Вот это святое, особенно когда на Laravel или Symfony работаешь. Пространства имён должны чётко по файловой структуре отражаться. Автозагрузка работает сама, как швейцарские часы, а не как советский трактор. Удивление пиздец, когда впервые с этим сталкиваешься и понимаешь, как жили раньше.
Вот, смотри, как примерно код должен выглядеть, чтобы у всех волнение ебать прошло:
<?php
declare(strict_types=1);
namespace AppServicesPayment;
use AppContractsPaymentProcessorInterface;
use AppDTOPaymentDetails;
use AppExceptionsPaymentFailedException;
class StripePaymentService implements PaymentProcessorInterface
{
private float $commissionRate;
public function __construct(float $commissionRate = 0.02)
{
$this->commissionRate = $commissionRate;
}
public function process(PaymentDetails $details): string
{
$amountWithCommission = $details->amount * (1 + $this->commissionRate);
// ... логика интеграции со Stripe API
return $this->chargeCustomer($details->token, $amountWithCommission);
}
}
А чтобы не было косяков, в ход шла тяжёлая артиллерия:
- PHP_CodeSniffer с настройками на
PSR12. Эта штука в пайплайне CI/CD всё проверяла. Найдёт лишний пробел — и всё, билд падает, иди чини, распиздяй. Жёстко, но справедливо. - PHPStan / Psalm. Ну, это уже высший пилотаж. Статический анализ типов, который ловит такие подводные камни, что сам от себя охуеешь иногда. Доверия к коду после него — овердохуища.
- И да, PHPDoc-комментарии у нас тоже были не абы какие, а по единому шаблону. Чтобы не было вот этого: «написал функцию, а через месяц смотришь — и хуй поймёшь, что она принимает и что возвращает».