本文目录导读:

我来为你详细解析PHP项目状态与上下文的管理:
状态管理方式
服务器端状态
// Session示例
session_start();
$_SESSION['user_id'] = 123;
$_SESSION['cart'] = ['item1', 'item2'];
// 文件存储
file_put_contents('state.json', json_encode($state));
// 数据库存储
$db->insert('sessions', [
'id' => session_id(),
'data' => serialize($state)
]);
客户端状态
// Cookie
setcookie('theme', 'dark', time() + 86400);
// LocalStorage (前端)
// localStorage.setItem('preferences', JSON.stringify(data));
请求上下文管理
依赖注入容器
class Container {
private $instances = [];
public function set($id, $instance) {
$this->instances[$id] = $instance;
}
public function get($id) {
return $this->instances[$id] ?? null;
}
}
// 使用示例
$container = new Container();
$container->set('db', new Database());
$container->set('logger', new Logger());
class UserController {
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
public function index() {
$db = $this->container->get('db');
// 处理逻辑
}
}
请求上下文对象
class RequestContext {
private $request;
private $user;
private $startTime;
public function __construct(Request $request) {
$this->request = $request;
$this->user = null;
$this->startTime = microtime(true);
}
public function getUser() {
return $this->user;
}
public function setUser($user) {
$this->user = $user;
}
public function getExecutionTime() {
return microtime(true) - $this->startTime;
}
}
框架中的状态管理
Laravel 示例
// Session
session(['key' => 'value']);
$value = session('key');
// Cache
Cache::put('user_data', $data, 3600);
$data = Cache::get('user_data');
// 请求上下文
use Illuminate\Http\Request;
public function store(Request $request) {
$context = [
'user' => $request->user(),
'ip' => $request->ip(),
'data' => $request->all()
];
}
Symfony 示例
use Symfony\Component\HttpFoundation\Session\Session;
$session = new Session();
$session->start();
$session->set('cart_items', $items);
// 请求堆栈
use Symfony\Component\HttpFoundation\RequestStack;
class Controller {
private $requestStack;
public function __construct(RequestStack $requestStack) {
$this->requestStack = $requestStack;
}
public function index() {
$request = $this->requestStack->getCurrentRequest();
$masterRequest = $this->requestStack->getMasterRequest();
}
}
状态模式设计
状态模式实现
interface OrderState {
public function process(Order $order): void;
public function cancel(Order $order): void;
}
class PendingState implements OrderState {
public function process(Order $order): void {
echo "订单处理中...";
$order->setState(new ProcessingState());
}
public function cancel(Order $order): void {
echo "取消待处理订单";
$order->setState(new CancelledState());
}
}
class Order {
private $state;
public function __construct() {
$this->state = new PendingState();
}
public function setState(OrderState $state): void {
$this->state = $state;
}
public function process(): void {
$this->state->process($this);
}
}
上下文管理最佳实践
上下文类设计
class ApplicationContext {
private static $instance;
private $data = [];
public static function getInstance(): self {
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
public function set(string $key, $value): void {
$this->data[$key] = $value;
}
public function get(string $key, $default = null) {
return $this->data[$key] ?? $default;
}
public function clear(): void {
$this->data = [];
}
}
// 使用
$context = ApplicationContext::getInstance();
$context->set('request_id', uniqid());
中间件管理
class StateMiddleware {
public function handle($request, Closure $next) {
// 请求前
$context = new RequestContext($request);
// 设置请求ID
$context->set('request_id',
$request->header('X-Request-ID') ?? uniqid());
// 绑定到容器
app()->instance(RequestContext::class, $context);
$response = $next($request);
// 请求后清理
$context->clear();
return $response;
}
}
性能优化建议
缓存策略
// 内存缓存
$cache = new RedisCache();
$key = 'user_' . $userId;
$user = $cache->get($key);
if (!$user) {
$user = User::find($userId);
$cache->set($key, $user, 3600);
}
// 延迟加载
class LazyLoader {
private $callback;
private $loaded = false;
private $value;
public function __construct(callable $callback) {
$this->callback = $callback;
}
public function get() {
if (!$this->loaded) {
$this->value = ($this->callback)();
$this->loaded = true;
}
return $this->value;
}
}
资源清理
class ResourceManager {
private $resources = [];
public function register($resource, callable $cleanup): void {
$this->resources[] = [
'resource' => $resource,
'cleanup' => $cleanup
];
}
public function cleanup(): void {
foreach (array_reverse($this->resources) as $item) {
($item['cleanup'])($item['resource']);
}
$this->resources = [];
}
}
监控与调试
// 状态监控
class StateMonitor {
private $metrics = [];
public function track(string $event, array $data = []): void {
$this->metrics[] = [
'event' => $event,
'data' => $data,
'time' => microtime(true),
'memory' => memory_get_usage()
];
}
public function getMetrics(): array {
return [
'total_events' => count($this->metrics),
'memory_peak' => memory_get_peak_usage(),
'events' => $this->metrics
];
}
}
- 选择合适的存储:根据数据性质选择Session、Cache或数据库
- 上下文隔离:每个请求独立上下文
- 状态流转清晰:使用状态模式管理复杂状态
- 资源管理:及时清理不再使用的状态
- 性能监控:跟踪状态操作对性能的影响
需要我详细解释某个具体场景的状态管理实现吗?