laravel 6 中无直接获取全部绑定标识的api,但可通过反射访问容器的 $bindings 属性(键为抽象名)、$instances 和 $resolved 属性,并可自定义 artisan 命令或搜索服务提供者注册痕迹来查看。

在 Laravel 6 中,服务容器本身没有直接公开的“获取全部已绑定标识”的 API 方法,但可以通过访问容器内部属性(非官方推荐但稳定可用)或使用调试辅助方式来查看当前已注册的所有绑定抽象(abstracts)。
直接读取容器的 $bindings 属性
Laravel 6 的 Illuminate\Container\Container 类将所有普通绑定(bind())存于私有属性 $bindings 中。虽然它是 protected,但在运行时可通过反射或直接访问(因 Laravel 框架自身也常这样调试)获取:
- 在 Tinker 或路由闭包中执行:
$app = app();
reflect($app)->getProperty('bindings')->setAccessible(true);
$bindings = reflect($app)->getProperty('bindings')->getValue($app);
array_keys($bindings); // 返回所有 abstract 字符串或类名
- 注意:
reflect()是 Laravel 自带的辅助函数(等价于new ReflectionClass()),也可写成完整形式:(new ReflectionClass($app))->getProperty('bindings') - 该数组键即为所有已 bind 的抽象标识,如
UserRepositoryInterface::class、'cache'等
查看单例绑定($instances)和实例绑定
单例(singleton())和显式实例(instance())分别存在 $instances 和 $resolved 属性中:
-
$instances:已解析并缓存的单例对象(键为 abstract) -
$resolved:标记为“已解析完成”的 abstract 列表(布尔值数组),含 bind/singleton/instance 三类 - 同样需用反射设为可访问后读取
使用 Artisan 命令快速查看(推荐调试用)
Laravel 6 官方未内置绑定列表命令,但可快速自定义一个:
- 运行:
php artisan make:command ListBindings - 在
handle()方法中写:
$container = app();
$bindings = (new \ReflectionClass($container))
->getProperty('bindings')
->setValue($container);
$this->table(['Abstract', 'Concrete'], array_map(function ($ab) use ($bindings) {
return [$ab, gettype($bindings[$ab]['concrete']) === 'object' ? get_class($bindings[$ab]['concrete']) : $bindings[$ab]['concrete'] ?? '(closure)'];
}, array_keys($bindings)));
- 执行:
php artisan list:bindings即可输出简洁表格
通过服务提供者注册痕迹反查
实际项目中,绝大多数绑定发生在服务提供者的 register() 方法里。可全局搜索:
$this->app->bind($this->app->singleton(-
app()->bind(或app()->singleton( - 重点关注
config/app.php的providers数组所加载的类











