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

核心标准(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
- 大括号换行(类和方法)
- 控制结构后加空格
else、elseif与 同一行
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标准
-
使用Composer自动加载(PSR-4)
-
配置编码风格检查工具
composer require squizlabs/php_codesniffer ./vendor/bin/phpcs --standard=PSR12 src/
-
使用代码格式化工具
composer require friendsofphp/php-cs-fixer ./vendor/bin/php-cs-fixer fix src/ --rules=@PSR12
-
遵循依赖注入原则(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);
}
}
使用技巧
-
工具集成
- PHPStorm/VS Code 配置PSR规范自动检查
- Git Hooks 中集成代码风格检查
-
保持一致性
- 所有项目统一使用相同的规范
- Rector 工具自动升级到新标准
-
持续跟进
- 关注 PHP-FIG 官网:https://www.php-fig.org/
- 查看各 RFC 草案与投票情况
通过遵循PHP-FIG标准,你的代码将更具可读性、可维护性,并能轻松集成到任何符合标准的PHP生态系统中。