当前位置:首页 > PHP

php 容器实现

2026-01-29 10:52:34PHP

PHP 容器实现方法

依赖注入容器(DIC)
PHP 容器通常指依赖注入容器,用于管理对象依赖关系。以下是一个简单实现:

class Container {
    private $bindings = [];

    public function bind($abstract, $concrete) {
        $this->bindings[$abstract] = $concrete;
    }

    public function make($abstract) {
        if (isset($this->bindings[$abstract])) {
            $concrete = $this->bindings[$abstract];

            if (is_callable($concrete)) {
                return $concrete($this);
            }

            return new $concrete();
        }

        throw new Exception("No binding found for {$abstract}");
    }
}

使用示例

php 容器实现

$container = new Container();
$container->bind('database', function() {
    return new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
});

$db = $container->make('database');

自动依赖解析实现

容器可以自动解析构造函数依赖:

public function make($abstract) {
    $reflector = new ReflectionClass($abstract);
    $constructor = $reflector->getConstructor();

    if (is_null($constructor)) {
        return new $abstract;
    }

    $parameters = $constructor->getParameters();
    $dependencies = array_map(function($param) {
        return $this->make($param->getClass()->name);
    }, $parameters);

    return $reflector->newInstanceArgs($dependencies);
}

单例模式支持

扩展容器以支持单例模式:

php 容器实现

private $instances = [];

public function singleton($abstract, $concrete) {
    $this->bind($abstract, function($container) use ($concrete) {
        if (!isset($this->instances[$abstract])) {
            $this->instances[$abstract] = is_callable($concrete) 
                ? $concrete($container) 
                : new $concrete();
        }
        return $this->instances[$abstract];
    });
}

接口绑定实现

支持接口到具体类的绑定:

$container->bind(DatabaseInterface::class, MySQLDatabase::class);
$db = $container->make(DatabaseInterface::class); // 返回 MySQLDatabase 实例

现有容器库推荐

  1. PHP-DI:功能全面的依赖注入容器,支持注解配置
  2. Laravel 容器:Laravel 框架内置的强大容器
  3. Pimple:轻量级容器实现,适合小型项目

性能优化建议

对于生产环境,考虑:

  • 使用缓存解析结果
  • 预编译容器配置
  • 避免深度依赖嵌套

以上实现展示了PHP容器的核心概念,实际应用中可根据需求扩展更多功能如作用域管理、上下文绑定等。

标签: 容器php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (in…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTM…