PHP 怎么FIG 标准

wen PHP项目 2

PHP-FIG 标准详解

PHP-FIG (PHP Framework Interop Group) 是一个组织,负责制定PHP社区的标准规范,通过这些标准来提高不同框架和库之间的互操作性。

PHP 怎么FIG 标准

核心标准(PSR)

PSR-1:基础编码标准

  • 文件必须使用 <?php<?=
  • 文件必须使用UTF-8编码(无BOM)
  • 类名必须使用 StudlyCaps(大驼峰)
  • 方法名必须使用 camelCase(小驼峰)
  • 类常量必须全大写,用下划线分隔
class UserController {
    const MAX_ITEMS = 10;
    public function getUsers() {
        // 方法体
    }
}

PSR-2:编码风格指南(已被PSR-12取代)

  • 遵循PSR-1
  • 使用4个空格缩进,不用Tab
  • 大括号换行(类和方法)
  • 控制结构后加空格
  • elseelseif 与 同一行
class Example 
{
    public function test($param)
    {
        if ($param) {
            echo "Hello";
        } else {
            echo "World";
        }
    }
}

PSR-3:日志接口

定义标准日志接口,方便日志库替换

interface LoggerInterface {
    public function emergency($message, array $context = []);
    public function error($message, array $context = []);
    public function info($message, array $context = []);
    // ...
}

PSR-4:自动加载

现代PHP最重要的标准,规范命名空间与路径的映射

// composer.json 配置
{
    "autoload": {
        "psr-4": {
            "App\\": "src/",
            "App\\Models\\": "src/Models/"
        }
    }
}
// 实际文件路径:src/Models/User.php
namespace App\Models;
class User {
    // 类定义
}

PSR-6:缓存接口

标准化的缓存接口

interface CacheItemPoolInterface {
    public function getItem($key);
    public function save(CacheItemInterface $item);
    public function deleteItem($key);
    // ...
}

PSR-7:HTTP消息接口

定义HTTP消息(请求/响应)的标准

interface ServerRequestInterface extends RequestInterface {
    public function getServerParams();
    public function getCookieParams();
    public function getQueryParams();
    // ...
}

PSR-11:容器接口

依赖注入容器的标准

interface ContainerInterface {
    public function get($id);
    public function has($id);
}

PSR-12:扩展编码风格指南

替换PSR-2,增加了更多现代特性支持

namespace App\Controllers;
use App\Models\User;
class UserController extends BaseController
{
    public function index(ServerRequestInterface $request): ResponseInterface
    {
        $users = User::all();
        return $this->response($users);
    }
}

如何遵守FIG标准

  1. 使用Composer自动加载(PSR-4)

  2. 配置编码风格检查工具

    composer require squizlabs/php_codesniffer
    ./vendor/bin/phpcs --standard=PSR12 src/
  3. 使用代码格式化工具

    composer require friendsofphp/php-cs-fixer
    ./vendor/bin/php-cs-fixer fix src/ --rules=@PSR12
  4. 遵循依赖注入原则(PSR-11)

    class AuthService {
        public function __construct(ContainerInterface $container) {
            $this->logger = $container->get(LoggerInterface::class);
        }
    }

实际应用示例

<?php
declare(strict_types=1);
namespace App\Controllers;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class ProductController
{
    private $logger;
    private $productRepository;
    public function __construct(
        LoggerInterface $logger,
        ProductRepository $productRepository
    ) {
        $this->logger = $logger;
        $this->productRepository = $productRepository;
    }
    public function show(ServerRequestInterface $request, $id): ResponseInterface
    {
        $product = $this->productRepository->find($id);
        if (!$product) {
            return $this->json(['error' => 'Product not found'], 404);
        }
        return $this->json($product);
    }
}

使用技巧

  1. 工具集成

    • PHPStorm/VS Code 配置PSR规范自动检查
    • Git Hooks 中集成代码风格检查
  2. 保持一致性

    • 所有项目统一使用相同的规范
    • Rector 工具自动升级到新标准
  3. 持续跟进

    • 关注 PHP-FIG 官网:https://www.php-fig.org/
    • 查看各 RFC 草案与投票情况

通过遵循PHP-FIG标准,你的代码将更具可读性、可维护性,并能轻松集成到任何符合标准的PHP生态系统中。

抱歉,评论功能暂时关闭!