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生态系统中。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播