wp-forge / container
一个轻量级的、PHP 8.0+ 兼容的、PSR-11 依赖注入容器。
3.0.1
2023-04-29 22:17 UTC
Requires
- php: >=8.0
- psr/container: ^1.0
README
一个轻量级的、PHP 8.0+ 兼容的、PSR-11 依赖注入容器。
使用方法
项目的基本操作。
<?php use WP_Forge\Container\Container; // Create a new instance $container = new Container(); // Set a value $container->set('email', 'webmaster@site.com'); // Check if a value exists $exists = $container->has('email'); // Get a value $value = $container->get('email'); // Delete a value $container->delete('email');
使用数组语法进行项目的基本操作。
<?php use WP_Forge\Container\Container; // Create a new instance $container = new Container(); // Set a value $container['email'] = 'webmaster@site.com'; // Check if a value exists $exists = isset( $container['email'] ); // Get a value $value = $container['email']; // Delete a value unset( $container['email'] );
注册一个工厂。每次获取时,工厂返回一个新的类实例。
<?php use WP_Forge\Container\Container; // Create a new instance $container = new Container(); // Add a factory $container->set( 'session', $container->factory( function( Container $c ) { return new Session( $c->get('session_id') ); } ) ); // Get a factory instance. $factory = $container->get( 'session' ); // Check if an item is a factory $isFactory = $container->isFactory( $factory );
注册一个服务。每次获取时,服务返回相同的类实例。
<?php use WP_Forge\Container\Container; // Create a new instance $container = new Container(); // Add a service $container->set( 'session', $container->service( function( Container $c ) { return new Session( $c->get('session_id') ); } ) ); // Get a service instance. $service = $container->get( 'session' ); // Check if an item is a service $isService = $container->isService( $service );
注册一个计算值回调。
<?php use WP_Forge\Container\Container; $container = new Container( [ 'first_name' => 'John', 'last_name' => 'Doe', ] ); $container->set( 'full_name', $container->computed( function ( Container $container ) { return implode( ' ', array_filter( [ $container->has( 'first_name' ) ? $container->get( 'first_name' ) : '', $container->has( 'last_name' ) ? $container->get( 'last_name' ) : '', ] ) ); } ) ); $full_name = $container->get( 'full_name' );
扩展先前注册的工厂或服务。
<?php $container->extend( 'session', function( $instance, Closure $c ) { $instance->setShoppingCart( $c->get('shopping_cart') ); return $instance; } );