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


Posted in PHP onJuly 24, 2019

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

通过魔术方法实现

class

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

$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

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

$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

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

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 程序员应该使用的10个组件
Oct 31 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
推荐一本PHP程序猿都应该拜读的书
Dec 31 PHP
PHP生成压缩文件实例
Feb 07 PHP
php实现字符串反转输出的方法
Mar 14 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 #PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 #PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 #PHP
PHP中__set()实例用法和基础讲解
Jul 23 #PHP
PHP大文件分块上传功能实例详解
Jul 22 #PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 #PHP
php多进程应用场景实例详解
Jul 22 #PHP
You might like
第三节--定义一个类
2006/11/16 PHP
浅谈php冒泡排序
2014/12/30 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
Python try except finally资源回收的实现
2021/01/25 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
css3学习心得分享
2013/08/19 HTML / CSS
HTML5 解析规则分析
2009/08/14 HTML / CSS
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
如何设置Java的运行环境
2013/04/05 面试题
实习生自荐信范文
2013/11/13 职场文书
交通事故检查书范文
2014/01/30 职场文书
社区维稳工作方案
2014/06/06 职场文书
门店业绩提升方案
2014/06/08 职场文书
大学生就业自荐书
2014/06/16 职场文书
小学优秀教师材料
2014/12/15 职场文书
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
2021/06/29 Javascript