当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP容器类的两种实现方式示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-07 15:52:48 浏览: 评论:0 

这篇文章主要介绍了PHP容器类的两种实现方式,结合实例形式分析了php定义与使用容器类的相关操作技巧,需要的朋友可以参考下。

本文实例讲述了PHP容器类的两种实现方式,分享给大家供大家参考,具体如下:

通过魔术方法实现

class

  1. class MagicContainer{ 
  2.   private $ele
  3.   function __construct() 
  4.   { 
  5.     $this->ele = []; 
  6.   } 
  7.   function __set($name$value
  8.   { 
  9.     $this->ele[$name] = $value
  10.   } 
  11.   function __get($name
  12.   { 
  13.     return $this->ele[$name]; 
  14.   } 
  15.   function __isset($name
  16.   { 
  17.     return isset($this->ele[$name]); 
  18.   } 
  19.   function __unset($name
  20.   { 
  21.     if(isset($this->ele[$name])){ 
  22.       unset($this->ele[$name]); 
  23.     } 
  24.   } 

usage

  1. $container = new MagicContainer(); 
  2. $container->logger = function ($msg){ 
  3.   file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND); 
  4. }; 
  5. $logger = $container->logger; 
  6. $logger('magic container works'); 

通过ArrayAccess接口实现

class

  1. class ArrayContainer implements ArrayAccess { 
  2.   private $elements
  3.   public function __construct() 
  4.   { 
  5.     $this->elements = []; 
  6.   } 
  7.   public function offsetExists($offset){ 
  8.     return isset($this->elements[$offset]); 
  9.   } 
  10.   public function offsetGet($offset){ 
  11.     if($this->offsetExists($offset)){ 
  12.       return $this->elements[$offset]; 
  13.     }else
  14.       return false; 
  15.     } 
  16.   } 
  17.   public function offsetSet($offset$value){ 
  18.     $this->elements[$offset] = $value
  19.   } 
  20.   public function offsetUnset($offset){ 
  21.     if($this->offsetExists($offset)){ 
  22.       unset($this->elements[$offset]); 
  23.     } 
  24.   } 

usage

  1. $container = new ArrayContainer(); 
  2. $container['logger'] = function ($msg){ 
  3.   file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND); 
  4. }; 
  5. $logger = $container['logger']; 
  6. $logger('array container works'); 

Container

class

  1. class Container implements ArrayAccess { 
  2.   private $elements
  3.   public function __construct() 
  4.   { 
  5.     $this->elements = []; 
  6.   } 
  7.   public function offsetExists($offset){ 
  8.     return isset($this->elements[$offset]); 
  9.   } 
  10.   public function offsetGet($offset){ 
  11.     if($this->offsetExists($offset)){ 
  12.       return $this->elements[$offset]; 
  13.     }else
  14.       return false; 
  15.     } 
  16.   } 
  17.   public function offsetSet($offset$value){ 
  18.     $this->elements[$offset] = $value
  19.   } 
  20.   public function offsetUnset($offset){ 
  21.     if($this->offsetExists($offset)){ 
  22.       unset($this->elements[$offset]); 
  23.     } 
  24.   } 
  25.   function __set($name$value
  26.   { 
  27.     $this->elements[$name] = $value
  28.   } 
  29.   function __get($name
  30.   { 
  31.     return $this->elements[$name]; 
  32.   } 
  33.   function __isset($name
  34.   { 
  35.     return isset($this->elements[$name]); 
  36.   } 
  37.   function __unset($name
  38.   { 
  39.     if(isset($this->elements[$name])){ 
  40.       unset($this->elements[$name]); 
  41.     } 
  42.   } 

usage

  1. $container = new Container(); 
  2. $container['logger'] = function ($msg){ 
  3.   file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND); 
  4. }; 
  5. $logger = $container->logger; 
  6. $logger('container works');

Tags: PHP容器类

分享到: