当前位置:首页 > 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记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

php搜索功能的实现

php搜索功能的实现

实现PHP搜索功能的方法 数据库搜索 使用SQL的LIKE语句进行模糊匹配,适用于简单的搜索需求。 $searchTerm = $_GET['search']; $query = "SELECT *…