Skip to content

Commit e76a208

Browse files
committed
Initial commit.
0 parents  commit e76a208

5 files changed

Lines changed: 657 additions & 0 deletions

File tree

README.md

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
# Container
2+
3+
A lightweight, PHP 5.4+ compatible, PSR-11 dependency injection container.
4+
5+
## Usage
6+
7+
Basic manipulation of items.
8+
9+
```php
10+
<?php
11+
12+
use WP_Forge\Container\Container;
13+
14+
// Create a new instance
15+
$container = new Container();
16+
17+
// Set a value
18+
$container->set('email', 'webmaster@site.com');
19+
20+
// Check if a value exists
21+
$exists = $container->has('email');
22+
23+
// Get a value
24+
$value = $container->get('email');
25+
26+
// Delete a value
27+
$container->delete('email');
28+
```
29+
30+
Basic manipulation of items using array syntax.
31+
32+
```php
33+
<?php
34+
35+
use WP_Forge\Container\Container;
36+
37+
// Create a new instance
38+
$container = new Container();
39+
40+
// Set a value
41+
$container['email'] = 'webmaster@site.com';
42+
43+
// Check if a value exists
44+
$exists = isset( $container['email'] );
45+
46+
// Get a value
47+
$value = $container['email'];
48+
49+
// Delete a value
50+
unset( $container['email'] );
51+
```
52+
53+
Register a factory. Factories return a new class instance every time you fetch them.
54+
55+
```php
56+
<?php
57+
58+
use WP_Forge\Container\Container;
59+
60+
// Create a new instance
61+
$container = new Container();
62+
63+
// Add a factory
64+
$container->set( 'session', $container->factory( function( Container $c ) {
65+
return new Session( $c->get('session_id') );
66+
} ) );
67+
68+
// Get a factory instance.
69+
$factory = $container->get( 'session' );
70+
71+
// Check if an item is a factory
72+
$isFactory = $container->isFactory( $factory );
73+
```
74+
75+
Register a service. Services return the same class instance every time you fetch them.
76+
77+
```php
78+
<?php
79+
80+
use WP_Forge\Container\Container;
81+
82+
// Create a new instance
83+
$container = new Container();
84+
85+
// Add a service
86+
$container->set( 'session', $container->service( function( Container $c ) {
87+
return new Session( $c->get('session_id') );
88+
} ) );
89+
90+
// Get a service instance.
91+
$service = $container->get( 'session' );
92+
93+
// Check if an item is a service
94+
$isService = $container->isService( $service );
95+
```
96+
97+
Register a computed value callback.
98+
99+
```php
100+
<?php
101+
102+
use WP_Forge\Container\Container;
103+
104+
$container = new Container( [
105+
'first_name' => 'John',
106+
'last_name' => 'Doe',
107+
] );
108+
109+
$container->set( 'full_name', $container->computed( function ( Container $container ) {
110+
return implode( ' ', array_filter( [
111+
$container->has( 'first_name' ) ? $container->get( 'first_name' ) : '',
112+
$container->has( 'last_name' ) ? $container->get( 'last_name' ) : '',
113+
] ) );
114+
} ) );
115+
116+
$full_name = $container->get( 'full_name' );
117+
```
118+
119+
Extend a previously registered factory or service.
120+
121+
```php
122+
<?php
123+
124+
$container->extend( 'session', function( $instance, Closure $c ) {
125+
126+
$instance->setShoppingCart( $c->get('shopping_cart') );
127+
128+
return $instance;
129+
} );
130+
131+
```

composer.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "wp-forge/container",
3+
"description": "A lightweight, PHP 5.4+ compatible, PSR-11 dependency injection container.",
4+
"type": "library",
5+
"license": "GPL-2.0-or-later",
6+
"authors": [
7+
{
8+
"name": "Micah Wood",
9+
"email": "micah@wpscholar.com"
10+
}
11+
],
12+
"autoload": {
13+
"psr-4": {
14+
"WP_Forge\\Container\\": "includes"
15+
}
16+
},
17+
"require": {
18+
"psr/container": "^1.0"
19+
}
20+
}

0 commit comments

Comments
 (0)