当前位置:首页 > 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中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php实现抽奖程序

php实现抽奖程序

PHP实现抽奖程序 基本抽奖逻辑 创建一个简单的抽奖程序需要定义奖品、中奖概率及随机选择逻辑。以下是一个基础实现示例: <?php // 奖品配置(奖品名称 => 概率) $prizes…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…