本文实例讲述了PHP容器类的两种实现方式。分享给大家供大家参考,具体如下:
通过魔术方法实现
class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class MagicContainer{
private $ele ;
function __construct()
{
$this ->ele = [];
}
function __set( $name , $value )
{
$this ->ele[ $name ] = $value ;
}
function __get( $name )
{
return $this ->ele[ $name ];
}
function __isset( $name )
{
return isset( $this ->ele[ $name ]);
}
function __unset( $name )
{
if (isset( $this ->ele[ $name ])){
unset( $this ->ele[ $name ]);
}
}
}
|
usage
1
2
3
4
5
6
|
$container = new MagicContainer();
$container ->logger = function ( $msg ){
file_put_contents ( 'info.log' , $msg .PHP_EOL,FILE_APPEND);
};
$logger = $container ->logger;
$logger ( 'magic container works' );
|
通过ArrayAccess接口实现
class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class ArrayContainer implements ArrayAccess {
private $elements ;
public function __construct()
{
$this ->elements = [];
}
public function offsetExists( $offset ){
return isset( $this ->elements[ $offset ]);
}
public function offsetGet( $offset ){
if ( $this ->offsetExists( $offset )){
return $this ->elements[ $offset ];
} else {
return false;
}
}
public function offsetSet( $offset , $value ){
$this ->elements[ $offset ] = $value ;
}
public function offsetUnset( $offset ){
if ( $this ->offsetExists( $offset )){
unset( $this ->elements[ $offset ]);
}
}
}
|
usage
1
2
3
4
5
6
|
$container = new ArrayContainer();
$container [ 'logger' ] = function ( $msg ){
file_put_contents ( 'info.log' , $msg .PHP_EOL,FILE_APPEND);
};
$logger = $container [ 'logger' ];
$logger ( 'array container works' );
|
Container
class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
class Container implements ArrayAccess {
private $elements ;
public function __construct()
{
$this ->elements = [];
}
public function offsetExists( $offset ){
return isset( $this ->elements[ $offset ]);
}
public function offsetGet( $offset ){
if ( $this ->offsetExists( $offset )){
return $this ->elements[ $offset ];
} else {
return false;
}
}
public function offsetSet( $offset , $value ){
$this ->elements[ $offset ] = $value ;
}
public function offsetUnset( $offset ){
if ( $this ->offsetExists( $offset )){
unset( $this ->elements[ $offset ]);
}
}
function __set( $name , $value )
{
$this ->elements[ $name ] = $value ;
}
function __get( $name )
{
return $this ->elements[ $name ];
}
function __isset( $name )
{
return isset( $this ->elements[ $name ]);
}
function __unset( $name )
{
if (isset( $this ->elements[ $name ])){
unset( $this ->elements[ $name ]);
}
}
}
|
usage
1
2
3
4
5
6
|
$container = new Container();
$container [ 'logger' ] = function ( $msg ){
file_put_contents ( 'info.log' , $msg .PHP_EOL,FILE_APPEND);
};
$logger = $container ->logger;
$logger ( 'container works' );
|
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/koastal/article/details/72528456