本文实例讲述了PHP容器类的两种实现方式。分享给大家供大家参考,具体如下:
通过魔术方法实现
class
代码语言:javascript复制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
代码语言:javascript复制$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
代码语言:javascript复制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
代码语言:javascript复制$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
代码语言:javascript复制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
代码语言:javascript复制$container = new Container();
$container['logger'] = function ($msg){
file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND);
};
$logger = $container- logger;
$logger('container works');