Download the PHP package kode/facade without Composer
On this page you can find all versions of the php package kode/facade. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Please rate this library. Is it a good library?
Informations about the package facade
KodePHP Facade 组件
包名:
kode/facade
版本: 2.0.0 (稳定版)
PHP 版本: >=8.1
作者: KodePHP Team
许可证: Apache-2.0
IDE 支持: PhpStorm, VS Code
📦 概述
kode/facade 是一个健壮、通用、轻量级的 PHP 门面抽象组件,专为 KodePHP 框架设计,同时兼容 Laravel、Symfony、ThinkPHP 8、Webman、自研框架 等主流 PHP 框架。
该组件提供:
- ✅ 静态代理 - 实现服务容器绑定的动态调用
- ✅ PHP 8.1+ 支持 - 支持所有新特性(协变、逆变、枚举、只读类等)
- ✅ 协程安全 - 完全无副作用,不影响协程、多线程、多进程模型
- ✅ 反射缓存 - 使用反射 + 缓存实现安全、快速的方法调用
- ✅ 上下文隔离 - 支持 Fiber、Swoole、Swow 等协程环境的上下文隔离
- ✅ 跨框架兼容 - 可作为通用组件在任何 PSR-11 容器中使用
- ✅ IDE 友好 - 提供完整的 PHPDoc 智能提示支持
🧩 核心设计理念
| 特性 | 说明 |
|---|---|
| 🔐 无全局状态污染 | 不使用 static::$app 全局赋值,通过 ContainerInterface 注入 |
| ⚡ 性能优化 | 方法映射缓存 + 反射缓存,避免重复解析 |
| 🔄 协变逆变支持 | 接口返回类型与参数支持 PHP 泛型风格协变与逆变 |
| 🧱 解耦设计 | 仅依赖 Psr\Container\ContainerInterface,不依赖具体实现 |
| 🔧 高度可配置 | 支持自定义容器实现、门面映射、方法缓存等 |
| 🔧 高度可扩展 | 支持自定义门面映射、方法缓存等 |
📚 安装方式
🧠 核心类与 API
1. Facade 抽象类(核心)
所有门面的基类,提供静态代理能力。
2. FacadeProxy(代理管理器)
管理门面类与实际服务实例之间的映射关系。
3. ContextualFacadeManager(上下文管理器)
为协程环境提供上下文隔离的门面实例管理。
🛠 使用示例
步骤 1:定义一个服务接口
步骤 2:实现服务
步骤 3:创建门面
步骤 4:在任意框架中使用
Laravel / Symfony / ThinkPHP / Webman 示例
🧩 增强功能
✅ 门面状态检查
✅ 获取门面信息
✅ 方法调用增强
✅ 上下文安全模式(Context-Safe Mode)
在协程环境(如 Swoole、Swow、PHP 8.1+ Fiber)中,可以启用上下文安全模式以确保门面实例在不同协程间隔离:
上下文安全模式特性:
- ✅ 每个协程/上下文拥有独立的实例缓存
- ✅ 支持 PHP Fiber、Swoole、Swow 等协程环境
- ✅ 与原有 API 完全兼容
- ✅ 可随时启用或禁用
✅ 测试模拟
🧩 高级特性
✅ 协变(Covariance)支持
✅ kode/facade 完全支持此类返回类型的协变。
✅ 逆变(Contravariance)支持
✅ 参数类型的逆变在反射调用中被正确处理。
✅ 反射安全调用(带缓存)
内部使用 ReflectionMethod + 数组缓存:
调用信息缓存于静态数组,避免重复反射。
🧪 测试与兼容性
| 框架 | 兼容性 | 说明 |
|---|---|---|
| Laravel 9+ | ✅ | 使用 app() 或 Container 注入 |
| Symfony 6+ | ✅ | 通过 ServiceContainer 传入 |
| ThinkPHP 8 | ✅ | 使用 app() 兼容 PSR 容器 |
| Webman 1+ | ✅ | 支持 Workerman 多进程模型 |
| Swoole 协程 | ✅ | 无全局变量,协程安全 |
| 多线程(ZTS) | ✅ | 不使用静态实例缓存线程局部存储 |
📂 包结构
📄 composer.json
📌 最佳实践建议
- 门面类名:使用单数、动词或名词,如
Mail、Cache、Log、DB - 方法名:保持与服务接口一致,避免动词重复(如
getGet) - 不覆盖
__callStatic:避免破坏代理机制 - 绑定在启动时完成:在
bootstrap.php或ServiceProvider中调用FacadeProxy::bind() - 测试时使用
clear():避免测试间状态污染 - 协程环境启用上下文安全模式:确保实例隔离
📞 联系与贡献
- GitHub: github.com/kodephp/facade
- Issues: 欢迎提交 Bug 与 Feature Request
- PR: 开放贡献,需包含单元测试
✅
kode/facade—— 简单、安全、通用、高性能的 PHP 门面解决方案。
为未来协程、多线程、多进程架构打下坚实基础。
All versions of facade with dependencies
PHP Build Version
Package Version
The package kode/facade contains the following files
Loading the files please wait ...